pinv结果diff - matlab

时间:2012-12-06 14:08:09

标签: matlab image-processing matrix

作为我们作业的一部分,我们需要将imageA映射到iamge B. 我正在使用此代码进行逆映射
A = zeros(8,8);
A = [imageB(1,1) imageB(2,1) 0 0 1 0 (-1)*(imageB(1,1))imageA(1,1) (-1)(imageB(2,1))imageA(1,1);
0 0 imageB(1,1) imageB(2,1) 0 1 (-1)
(imageB(1,1))imageA(2,1) (-1)(imageB(2,1))imageA(2,1);
imageB(1,2) imageB(2,2) 0 0 1 0 (-1)
(imageB(1,2))imageA(1,2) (-1)(imageB(2,2))imageA(1,2);
0 0 imageB(1,2) imageB(2,2) 0 1 (-1)
(imageB(1,2))imageA(2,2) (-1)(imageB(2,2))imageA(2,2);
imageB(1,3) imageB(2,3) 0 0 1 0 (-1)
(imageB(1,3))imageA(1,3) (-1)(imageB(2,3))imageA(1,3);
0 0 imageB(1,3) imageB(2,3) 0 1 (-1)
(imageB(1,3))imageA(2,3) (-1)(imageB(2,3))imageA(2,3);
imageB(1,4) imageB(2,4) 0 0 1 0 (-1)
(imageB(1,4))imageA(1,4) (-1)(imageB(2,4))imageA(1,4);
0 0 imageB(1,4) imageB(2,4) 0 1 (-1)
(imageB(1,4))imageA(2,4) (-1)(imageB(2,4))*imageA(2,4)];
imageA(1,4); imageA(2,4)];
B = reshape(imageA,[],1);

D = pinv(A)*B;

我的朋友使用此代码:
D = inv(A'*A)*A'*B;


我获得与他相同的值,除了我得到0.0000并得到-0.0000 所有其他正数或负数都是相同的。

这是为什么?什么是正确答案?
您有什么建议我可以轻松检查我的结果?

1 个答案:

答案 0 :(得分:2)

似乎这些差异源于数值不稳定性。它们在机器精度方面有多大(eps)? 你为什么不用backslash

>> D = A \ B;