我做的:與值替換元素是不一樣的
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
相同的其他元素。 這是爲什麼?
我做的:與值替換元素是不一樣的
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
相同的其他元素。 這是爲什麼?
因爲他們是不相等的。它只是一個顯示器。要看到這一點:
fprintf('%.8f\n', T(1,1))
會給你
0.29893602
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)
是它應該是。
測試浮點數以確保相等是很危險的。默認情況下,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
我如何可以查看所有的數字? – volperossa
我真的不知道。但是 - 爲什麼你想看到所有的數字?如果你想檢查平等,檢查兩個數字是否在一定的容差範圍內。 –
我需要複製相同的行爲,而無需調用inv函數(所以我只需要在產品中使用的數字...我用fprintf解析('%。55f \ n',T(1,1))XD – volperossa