I use this code:
b=inv(A'*A)*A'*y;
Matlab gives warning. never use inv to solve linear system
How can I fix it?

 채택된 답변

Walter Roberson
Walter Roberson 2019년 7월 28일

0 개 추천

b=inv(A'*A)*A'*y;
Multiply both sides on the left by A'*A :
(A'*A) * b = (A'*A) * inv(A'*A) * A' * y
and for any invertable matrix, X * inv(X) is the identity matrix so (A'*A) * inv(A'*A) cancels out to identity, so
(A'*A) * b = A' * y
Multiply both sides on the left by inv(A'):
inv(A') * A' * A * b = inv(A') * A' * y
and inv(A') * A' cancels to the identity on both sides, so
A * b = y
Multiply by inv(A) on the left on both sides:
inv(A) * A * b = inv(A) * y
inverse cancels to identity, so
b = inv(A) * y
Now use the \ operator:
b = A \ y;
The above mathematics might not strictly apply if A is not a square matrix.

댓글 수: 8

NA
NA 2019년 7월 28일
It means that instead of using
b=inv(A'*A)*A'*y;
I should use
b=A\y
Walter Roberson
Walter Roberson 2019년 7월 28일
Yup.
NA
NA 2019년 7월 28일
so if I have this
di=sum((r*inv(sig)).*r,2);
should be change to
di=sum((r/(sig)).*r,2);
Is it correct?
Walter Roberson
Walter Roberson 2019년 7월 28일
That looks strange to me, seeing as it has both a matrix multiply by r ( * operator) and an element-by-element multiplication by r ( .* operator) . But if the * and .* are both correct, then yes, r/sig .* r
NA
NA 2019년 8월 1일
I have this
RR = WW - HH * inv(HH' * WWInv * HH) * HH';
Can I change it to this one?
RR = WW - HH * (HH' * WWInv * HH)\ HH';
Yes, but you should be questioning why you are doing that.
Provided that HH and WWInv are square matrices, then
inv(HH' * WWInv * HH)
equals
inv(HH)*inv(WWInv) * inv(HH')
You then right-multiply by HH' so
inv(HH)*inv(WWInv) * inv(HH') * HH'
and you group the last two together and the inv(HH') will cancel the HH, leaving
inv(HH)*inv(WWInv)
The name suggests that inv(WWInv) would probably be an existing variable named WW, so you could probably instead be using
RR = WW - HH \ WW
NA
NA 2019년 8월 2일
Thank you. But
RR = WW - HH * inv(HH' * WWInv * HH) * HH';
RR = WW - HH *inv(HH)*inv(WWInv)
RR = 0
Walter Roberson
Walter Roberson 2019년 8월 2일
Yes, I missed the HH pre-multiplier, but Yes, that logic appears correct. If you try it with actual random matrices, you will find that RR is 0 to within round-off error (e.g., for rand(15,15) all of the entries come out with absolute value less than 1E-13

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Mathematics에 대해 자세히 알아보기

질문:

NA
2019년 7월 28일

댓글:

2019년 8월 2일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by