【发布时间】:2014-10-02 14:37:11
【问题描述】:
我的目标是求解满足 [A]*[B]=[C] 的矩阵 [A],其中 [C] 已知且 [B] 是随机生成的。下面是一个例子:
C=[1/3 1/3 1/3]'*[1/3 1/6 1/6 1/6 1/6];
B=rand(5,5);
A=C*pinv(B);
A*B=C_test;
norm(C-C_test);
ans =
4.6671e-16
这里 [C_test] 的元素在原始 [C] 的 1e-15 范围内,但是当 [B] 的行数少于列数时,误差会急剧增加(不确定 norm() 是不是最好的显示方式错误,但我认为它说明了问题)。例如:
B=rand(4,5);
A=C*pinv(B);
A*B=C_test;
norm(C-C_test);
ans =
0.0173
其他方法:
二维码分解
[Q,R,P]=qr(B);
A=((C*P)/R))*Q';
norm(C-A*B);
ans =
0.0173
/ 运算符
A=C/B;
norm(C-A*B);
ans =
0.0173
为什么会这样?在这两种情况下 [B]*pinv([B])=[I] 所以看起来这个过程应该有效。 如果这是与 pinv() 或其他方法相关的生命的数值或代数事实,是否有另一种方法可以生成 [A] 来满足方程?谢谢!
【问题讨论】:
标签: matlab matrix matrix-inverse