2

私は、主に部分ピボットMatlabを使用したLU分解に基づいて、私のlu分解を操作しようとしています

function [L,U,P] = lup(A)
n = length(A);
L = eye(n);
U = zeros(n);
P = eye(n);

for k=1:n-1
% find the entry in the left column with the largest abs value (pivot)
[~,r] = max(abs(A(k:end,k)));
r = n-(n-k+1)+r;

A([k r],:) = A([r k],:);
P([k r],:) = P([r k],:);
L([k r],:) = L([r k],:);

% from the pivot down divide by the pivot
L(k+1:n,k) = A(k+1:n,k) / A(k,k);

U(k,1:n) = A(k,1:n);
A(k+1:n,1:n) = A(k+1:n,1:n) - L(k+1:n,k)*A(k,1:n);

end
U(:,end) = A(:,end);

end

ほとんどの行列 (matlab lu 関数と同等) で機能するようですが、次の行列は異なる結果を生成するようです。

A = [
 3    -7    -2     2
-3     5     1     0
 6    -4     0    -5
-9     5    -5    12
];

何が問題なのかわかりません。リンクされた投稿に記載されている行列ではうまくいくようです

4

1 に答える 1