A*M*B=I 已知A和B,A和B都不是方陣,求解M?
01-08
A: 3x5
B: 5x3都是已知的討厭的是A和B都不是方陣,不能簡單地求逆;如果套用偽逆的話,這裡也很難湊出A*pinv(A)=I 或者 pinv(B)*B=I的形式 這個應該如何求解呢?
接著 @龔譯凡 的解釋,根據Kronecker Product的性質
http://www.siam.org/books/textbooks/OT91sample.pdfvec(AMB) = (B"otimesA)*vec(M) ,
也就是說, 用vec() 運算符在原等式兩邊同時操作,可以把原方程可以轉化成一個標準的線性方程
(B"*otimesA)*vec(M) = vec(I)
翻譯成MATLAB代碼,就是&>&> I = eye(3);&>&> M_vec = kron(B."*A)I(:);&>&> M = reshape(M_vec, 5,5);有兩個方法求,Pseudo Inverse和SVD,偽逆的方法是可行的。
只考慮實矩陣,分別行列滿秩。方法1-Pseudo Inverse:的偽逆為別為並且滿足
因此取即可。m = 3;
n = 5;
A = randn(m, n);
B = randn(n, m);
iA1 = (A") /(A*A");
iB1 = (B"*B) B";
M = iA1*iB1;
A*M*B
[u1, s1, v1] = svd(A, "econ");
is1 = diag(diag(s1).^(-1));
iA2 = (v1)*is1*(u1");
[u2, s2, v2] = svd(B, "econ");
is2 = diag(diag(s2).^(-1));
iB2 = (v2)*is2*(u2");
M = iA2*iB2;
A*M*B
然後是它們的積。
兩個方法返回的結果一致,另外還可以考慮將的行,的列單位正交化的方法。手機不好打…請搜索kronecker積
好像沒那麼麻煩
A M B = E
設 A = U1 D1 V1, B = U2 D2 V2則U1 D1 V1 M U2 D2 V2 = EM = V1" D1^-1 U1" V2" D2^-1 U2"D一定full rank,否則相乘後一定不等於full rank的E可不可以兩邊左乘A的逆,右乘以B的逆,matlab有廣義逆的具體語句
1,你可以試試matlab 運算符,幫助你求解廣義逆,應該就是偽逆2,試試將A與B矩陣分解,比如SVD分解
推薦閱讀:
※向量的2範數求導?
※如何求矩陣的正交補?
※為什麼核範數能凸近似矩陣的秩?為什麼核範數是凸的?
※矩陣的核範數的導數是什麼?
※向量/矩陣導數是屬於哪個學科的內容?有什麼好的教材/資料可以推薦?