[解決済み] 部分ピボッティングによるLU分解 Matlab
2022-02-10 13:54:14
質問
部分ピボットによるLU分解を独自に実装しようとしています。私のコードは以下のとおりで、どうやらうまくいっているようなのですが、いくつかの行列については、組み込みの
[L, U, P] = lu(A)
関数
どこが間違っているのか、どなたかわかりますか?
function [L, U, P] = lu_decomposition_pivot(A)
n = size(A,1);
Ak = A;
L = zeros(n);
U = zeros(n);
P = eye(n);
for k = 1:n-1
for i = k+1:n
[~,r] = max(abs(Ak(:,k)));
Ak([k r],:) = Ak([r k],:);
P([k r],:) = P([r k],:);
L(i,k) = Ak(i,k) / Ak(k,k);
for j = k+1:n
U(k,j-1) = Ak(k,j-1);
Ak(i,j) = Ak(i,j) - L(i,k)*Ak(k,j);
end
end
end
L(1:n+1:end) = 1;
U(:,end) = Ak(:,end);
return
以下は、私がテストした2つのマトリックスです。最初のものは正しいのですが、2番目のものはいくつかの要素が反転しています。
A = [1 2 0; 2 4 8; 3 -1 2];
A = [0.8443 0.1707 0.3111;
0.1948 0.2277 0.9234;
0.2259 0.4357 0.4302];
アップデイト
私のコードをチェックし、いくつかのバグを修正しましたが、部分ピボットについてはまだ何かが欠けています。最初の列では、最後の2行は常に反転しています(matlabのlu()の結果と比較して)。
function [L, U, P] = lu_decomposition_pivot(A)
n = size(A,1);
Ak = A;
L = eye(n);
U = zeros(n);
P = eye(n);
for k = 1:n-1
[~,r] = max(abs(Ak(k:end,k)));
r = n-(n-k+1)+r;
Ak([k r],:) = Ak([r k],:);
P([k r],:) = P([r k],:);
for i = k+1:n
L(i,k) = Ak(i,k) / Ak(k,k);
for j = 1:n
U(k,j) = Ak(k,j);
Ak(i,j) = Ak(i,j) - L(i,k)*Ak(k,j);
end
end
end
U(:,end) = Ak(:,end);
return
解決方法は?
行列Pを入れ替えた場合、行列Lも入れ替えなければならないことを忘れていました。そこで、Pを入れ替えた後に次の行を追加すれば、すべてがうまくいきます。
L([k r],:) = L([r k],:);
関連
-
[解決済み] Matlabのfprintfを使用してテーブルを作成する
-
[解決済み] MATLAB: symからlogicalへの変換ができない
-
[解決済み] matlabで補強行列を作成し、縮小行エシュロン形式を作成する。
-
[解決済み] 部分ピボットによるガウス消去の実装【終了しました
-
[解決済み] エラー --> 整数には同じクラスの整数か、スカラー倍数しか組み合わせることができません。
-
[解決済み] MATLABによるパワーメソッド
-
[解決済み] MATLABで分数を10進数に変換する【重複】。
-
[解決済み] Wolfram AlphaとMATLABでは伝達関数のプロットが異なる
-
[解決済み] RGBカラーによるMATLABプロット
-
[解決済み] MATLABでヒストグラムを正規化する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MATLABで「連結される配列の次元が一致しない」というエラーをデバッグする。
-
[解決済み] matlabで補強行列を作成し、縮小行エシュロン形式を作成する。
-
[解決済み] エラー --> 整数には同じクラスの整数か、スカラー倍数しか組み合わせることができません。
-
[解決済み] matlab で "カラーマップ" プロットを作成するにはどうすればよいですか?
-
[解決済み] matlab、デフォルトの図サイズを設定するが、位置は気にしない?
-
[解決済み] Matlabで描画しています。図形を保存するか、変数を保存するか?
-
[解決済み] MATLABでマシンイプシロンを計算する方法は?
-
[解決済み] Matlabで'symfun'によって記号関数の微分を実装するには?
-
[解決済み] Matlab の imrect を用いて,新しい矩形の座標を取得します.
-
[解決済み] MATLABのコードヘルプです。バックワードオイラー法