matlab練習(消去變換及選主元法求逆算法)


消去變換的定義
消去變換實際上是Gauss-Jordan消去變換(G-J消去變換)的一種緊湊寫法,它可以由兩步完成,一步是G-J消去變換,另一步是替換,具體更多內容可見高慧璇著的《統計計算》,它的一個更貼近於代碼實現的定義如下圖所示

可以看到,這個變換很容易實現,只需要就4種不同情況分別定義好相應取值即可,下面是matlab中消去變換的實現

function B = Tij(A,i,j)
[m,n] = size(A);
B = zeros(m,n);
% case 1
B(i,j) = 1/A(i,j);
% case 2
for k = [1:i-1 i+1:m]
  B(k,j) = -1*A(k,j)/A(i,j);
end
% case 3
for k = [1:j-1 j+1:n]
  B(i,k) = A(i,k)/A(i,j);
end
% case 4
for k = [1:i-1 i+1:m]
  for s = [1:j-1 j+1:n]
    B(k,s) = A(k,s) - A(k,j)*A(i,s)/A(i,j);
  end
end
end

選主元法求逆算法
按行選主元法求逆算法具體流程如下圖所示,它的證明可以通過置換(可以分解為對換的乘積:$(i_1,i_2,\cdots,i_n)=(i_1\ i_2)(i_2\ i_3)\cdots(i_{n-1}\ i_n)$,從右往左的置換)以及消去變換的性質得到

下面是matlab中的實現

function B = inv_by_Tij(A)
[~,n] = size(A);
B = zeros(n);
C = 1:n;
L = zeros(1,n);
for i = 1:n
  [~,j] = max(A(i,C));
  A = Tij(A,i,C(j));
  L(i) = C(j);
  C(C==C(j)) = [];
end
for i = 1:n
  for j = 1:n
    B(L(i),j) = A(i,L(j));
  end
end
end

總結
消去變換是一種非常有用的方法,其本質仍然是高斯消去變換,不過這種緊湊的“原地求逆”變換一方面節省了存儲空間,另一方面也使得它在處理某些問題時會顯得非常方便


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM