There are two errors in my code. Can someone know how to edit it to maker it run? Thank you!
1 回表示 (過去 30 日間)
古いコメントを表示
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/555067/image.png)
Here is the function:
function [L,U] = eluinv(A)
[~,n]=size(A);
[L,U] = lu(A);
format compact
if closetozeroroundoff(A,7) == closetozeroroundoff(L*U,7)
disp('Yes, I have got LU factorization')
end
if closetozeroroundoff(rref(U),7) == closetozeroroundoff(rref(A),7)
disp('U is an echelon form of A')
else
disp('Something is wrong')
end
if rank(A) ~= min(size(A))
sprintf('A is not invertible')
invA=[];
return
else
leye = [L eye(size(L,1))];
ueye = [U eye(size(U,1))];
invLech = rref(leye);
invUech = rref(ueye);
invL = invLech(:,(n+1):size(invLech,2));
invU = invUech(:,(n+1):size(invUech,2));
invA = invU*invL;
if isequal(closetozeroroundoff(invA-inv(A)),zeros(size(A)))
disp('Yes, LU factorization works for calculating the inverses')
else
disp('LU factorization does not work for me?!')
end
end
0 件のコメント
採用された回答
Cris LaPierre
2021 年 3 月 18 日
The error message appears to show the reason for the error. Your matrix A must be square (3x3 or 4x4) in order to use inv.
if isequal(closetozeroroundoff(invA-inv(A)),zeros(size(A)))
^^^^^^ % Error is here
3 件のコメント
Cris LaPierre
2021 年 3 月 18 日
Your criteria do not check if the matrix is square. Perhaps you want this instead?
rank(A) ~= max(size(A))
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!