0

我做的:與值替換元素是不一樣的

T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]); 

獲得:

T = 

0.2989 0.5870 0.1140 
0.5959 -0.2744 -0.3216 
0.2115 -0.5229 0.3114 

如果我做

T(1,1)==0.2989 

我獲得

ans = 

0  

相同的其他元素。 這是爲什麼?

回答

2

因爲他們是不相等的。它只是一個顯示器。要看到這一點:

fprintf('%.8f\n', T(1,1)) 

會給你

0.29893602 
2

MATLAB存儲的數字比你通常看到的要多。 0.2989實際上是0.298936021293776(甚至那不是故事的結尾)。 試試你的代碼,並添加

format long 
T(1,1) 

但儘管如此,

T(1,1) == 0.298936021293776 
ans = 
0 

所以儘量

T(1,1) - 0.298936021293776 

你剛纔沒有看到所有的數字。 T(1,1)是它應該是。

+0

我如何可以查看所有的數字? – volperossa

+0

我真的不知道。但是 - 爲什麼你想看到所有的數字?如果你想檢查平等,檢查兩個數字是否在一定的容差範圍內。 –

+1

我需要複製相同的行爲,而無需調用inv函數(所以我只需要在產品中使用的數字...我用fprintf解析('%。55f \ n',T(1,1))XD – volperossa

1

測試浮點數以確保相等是很危險的。默認情況下,MATLAB使用64位來存儲浮點值,並且某些值(如0.1)甚至不能完全由任意數量的位表示。 T(1,1)是不完全0.2989,它具有更大的打印精度值時,你可以看到:

>> T = inv([1.0 0.956 0.621; 1.0 -0.272 -0.647; 1.0 -1.106 1.703]) 
T = 
    0.2989 0.5870 0.1140 
    0.5959 -0.2744 -0.3216 
    0.2115 -0.5229 0.3114 
>> fprintf('%1.10f\n', T(1,1)) 
0.2989360213 

這就是爲什麼T(1,1) == 0.2989返回false。它是安全測試兩個浮點值是否幾乎相等,即有關於一個公差值tol

>> tol = 1/1000; 
>> abs(T(1,1) - 0.2989) < tol 
ans = 
    1 

這裏的東西你應該閱讀:click