gpt4 book ai didi

MATLAB LU 分解部分旋转

转载 作者:行者123 更新时间:2023-12-05 02:22:26 24 4
gpt4 key购买 nike

我正在尝试主要基于 LU decomposition with partial pivoting Matlab 来处理我的 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
];

我只是不知道出了什么问题。它似乎在链接帖子中提到的矩阵上运行良好

最佳答案

你很接近。我总共改了三行

for k=1:n-1 变成了 for k=1:n 我们不做 -1 因为我们也想得到 L (n,n)=u(n,n)/u(n,n)=1 使用您的方法我们将其排除在外

L(k+1:n,k) = A(k+1:n,k)/A(k,k); 变成了 L(k:n,k ) = A(k:n,k)/A(k,k); 因为你遗漏了 L(k,k)=A(k,k)/A(k,k) =1

因为 k+1 改变了,我们不需要从 L 的单位矩阵开始,因为我们现在在对角线上复制 1,所以 L=eyes(n); 变成了 L=zeros(n);

和完成的代码

function [L,U,P] = lup(A)
% lup factorization with partial pivoting
% [L,U,P] = lup(A) returns unit lower triangular matrix L, upper
% triangular matrix U, and permutation matrix P so that P*A = L*U.
n = length(A);
L = zeros(n);
U = zeros(n);
P = eye(n);


for k=1:n
% 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:n,k) = A(k: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 分解部分旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29358167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com