A,B和C是矩陣。如果A.B = C,給定A,B,C是矩陣,那麼如何使用Matlab從B和C計算A?
A*B = C
現在我想要做一個反向即計算使用B A和C.我該怎麼辦呢? Matlab說B應該是一個平方矩陣來計算其逆。
A,B和C是矩陣。如果A.B = C,給定A,B,C是矩陣,那麼如何使用Matlab從B和C計算A?
A*B = C
現在我想要做一個反向即計算使用B A和C.我該怎麼辦呢? Matlab說B應該是一個平方矩陣來計算其逆。
如果一個獨特的解決方案存在,那麼一個可能最好使用PINV找到它。使用施瓦茨構成的例子...
A = [2 3 4];
B = [11 11 11; 12 12 12; 13 13 13];
C = A*B;
Ahat = C*pinv(B)
Ahat =
2.788 3.0415 3.2949
問題是,B是單數。所以可能有無數的解決方案。
B = magic(3)
B =
8 1 6
3 5 7
4 9 2
A = [2 3 4];
C = A*B
C =
41 53 41
Ahat = C*pinv(B)
Ahat =
2 3 4
Ahat = C/B
Ahat =
2 3 4
請參閱PINV和斜線都產生相同的解決方案,因爲乙是非奇異,這是很好的空調。
但是如果我們嘗試一些不太適應的東西,那麼該怎麼辦?在下一個例子中,我將使用一個並不那麼糟糕的矩陣。
>> A = [2 3 4];
>> B = [1 1 1;1 2 3;2 3 4.00001]
B =
1 1 1
1 2 3
2 3 4.00001
好,它有一個相當大的條件數,但這個矩陣是不是我會打電話數值單數。
cond(B)
ans =
2865128.4655819
C = A*B
C =
13 20 27.00004
現在嘗試幾種不同的解決方案。
format long g
Ahat1 = C*pinv(B)
Ahat1 =
2 3 4
pinv做得很好。
Ahat2 = C/B
Ahat2 =
2.00000000017764 3.00000000017764 3.99999999982236
Ahat3 = C*inv(B)
Ahat3 =
1.99999999953434 2.99999999953434 4.00000000046566
斜槓和inv都不壞,雖然在這種情況下顯然更糟糕。對於這個問題,pinv解決方案似乎更穩定一些。
我們也可以在此處拋出QR分解。使用樞軸解決方案以獲得最佳穩定性。請注意,當你的系統幾乎是單數時,我們仍然會遇到問題。
[Q,R,P] = qr(B);
你可以看到通過檢查R.最後的對角線元素的問題相比,餘數是微小的。這將導致解決方案出現問題,放大噪音。
R
R =
-5.09902735824196 -2.35339392337313 -3.72620671848107
0 0.679365175314723 0.339681455393392
0 0 -2.88675134520189e-06
的QR因素有Q * R * P」 = B.所以,我們可以在這裏解決一個屬性爲:
Ahat4 = ((C*P)/R)*Q'
Ahat4 =
2.00000000076851 3.0000000007685 3.9999999992315
請注意,我已經安排了括號是因爲儘可能高效,因爲MATLAB將使用R的屬性作爲三角矩陣來簡單地執行反求。我們不希望MATLAB將因素考慮在內。
但是,現在讓我們來看看一個由瓦希德提出:
Ahat5 = C*B'*(inv(B*B'))
Ahat5 =
1.9970703125 2.998046875 4.0029296875
然而,瓦希德提出的解決方案很糟糕。不要使用這最後一種形式。請。人們告訴你不要這樣做,或者他們應該告訴你這一點是有原因的!是的,我知道有一羣人不知道涉及的數學,並且不斷傳播它。你甚至可以在一些不知情的教科書中找到它。
關於pinv的好處是它適用於任何矩陣,單數或不是。如果存在解決方案,它會找到一個解決方案。如果解決方案是獨一無二的,它將起作用。如果解決方案不是唯一的,那麼,你期望什麼?
感謝一位很多人!奇蹟般有效! – schwarz
使用pinv反斜槓運算符有什麼優勢嗎? –
@Andrey - 好吧,pinv在這裏可能會稍微穩定些,正如我在編輯中展示的那樣。我在答案中加入了斜槓和qr解決方案的比較。 pinv的一個優點是它永遠不會抱怨,即使在真正的奇異矩陣中。一個缺點是pinv會在較大的問題上變慢。 – 2012-09-29 18:47:51
可以使用反斜線操作:
% if A*C = B
C = A\B
我不認爲在非矩形A的情況下,解決方案是獨一無二的,雖然...
我有的例子, 'A = [2 3 4]; B = [11 11 11; 12 12 12; 13 13 13]; C = A * B; %= [110]' 所以你的意思是在這種情況下找不到A. – schwarz
首先通過B'
繁衍A*B=C
雙方(轉置B的):
A*B*B'=C*B'
D=B*B'
讓(d是方陣):
A*D=C*B'
現在,通過inv(D)
乘以上述等式的兩邊:
A*D*inv(D)=C*B'*inv(D)
D*inv(D)=I
,所以:
A=C*B'*inv(D)
你的意思是'矩陣'/'矩陣'而不是'metric' /'metrics'? – rubenvb
哎呀,是的! 例如。 [1 2 3] – schwarz