2012-12-06 50 views
0

由於我們的作業的一部分,我們需要imageA映射到iamge乙
我使用此代碼爲逆映射
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;PINV導致差異 - MATLAB


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


我得到相同的值,因爲他不只是我得到0.0000和他取得-0.0000 所有號碼的其餘positiv e或負數是相同的。

這是爲什麼?什麼是正確答案?
你有什麼建議,我可以做,以檢查我的結果easly?

+2

與pinv結果相比,您的朋友使用的是較差的版本。 – 2012-12-06 14:53:52

+0

@woodchips是不是它基本上是相同的公式? – Gilad

+0

不! pinv不使用該表達式,雖然數學上相同,但它不是NUMERICALLY相同。由於與浮點運算的交互作用,pinv不會簡單地使用該表達式的原因有很多。 – 2012-12-06 19:56:57

回答

2

看起來這些差異源於數值不穩定性。機器精度(eps)有多大? 爲什麼不使用backslash

>> D = A \ B; 
+0

很高興見到以色列同胞。 3.77490637859040 -0.0851252221459957 -0.154767551596968 2.27267913596643 -180.056724602071 -98.3195068541737 -0.000604560748425658 -0.00122497904957724這些都是我得到反斜線工作就像一個魅力的數字,謝謝 – Gilad