带选主元的LU分解Matlab代码出错原因排查求助
带选主元LU分解代码错误排查求助
您好,我非英语母语,借助翻译工具提问,望谅解。我已成功实现无选主元的LU分解代码,现因作业需求编写带选主元的LU分解代码,但运行结果严重错误。以下是相关代码、测试矩阵及错误结果,恳请帮忙排查问题:
无选主元LU分解代码
% non-pivoting code function x = mylu_np(A) [m,~] = size(A); L = eye(m); U = A(:,:); for i = 1:m-1 for j = i+1:m L(j,i) = U(j,i)/U(i,i); U(j,i) = 0; U(j,i+1:m) = U(j,i+1:m) - L(j,i)*U(i,i+1:m); end end x = [L U]; end
带选主元LU分解代码
function x = mylu_pp(A) [m,~] = size(A); P = eye(m); L = eye(m); U = A(:,:); for i = 1:m-1 for j = i+1:m if abs(U(i,i)) < abs(U(j,i)) U([i j],:) = U([j i],:); P([i j],:) = P([j i],:); end end for j = i+1:m L(j,i) = U(j,i)/U(i,i); U(j,i) = 0; U(j,i+1:m) = U(j,i+1:m) - L(j,i)*U(i,i+1:m); end end x = [P L U]; end
测试矩阵及验证代码
A = [0.0001 -5.0300 5.8090 7.8320; 2.2660 1.9950 1.2120 8.0080; 8.8500 5.6810 4.5520 1.3020; 6.7750 -2.2530 2.9080 3.9700]; W = mylu_pp(A) P = W(1:4,1:4); L = W(1:4,5:8); U = W(1:4,9:12); P*A - L*U
错误结果
ans = [0.0000 0.0000 0.0000 0.0000; 6.7749 4.3489 3.4847 0.9967; -2.2659 -7.0250 -1.6521 2.1754 -4.5090 2.6761 -1.8326 -3.1721]
内容的提问来源于stack exchange,提问作者Nightflight
相关产品推荐
相关产品推荐

