2016-03-07 69 views
0

我正在嘗試創建一個增強矩陣來解決問題,但我無法獲得不捨入值。矩陣d正試圖擴展到矩陣Diff。我希望Diff中的十進制值保持小數,d中的較大值保持較大值,但是無論何時我嘗試添加它,MATLAB都會自動減少所有值。爲什麼這樣做以及如何解決它?增強矩陣舍入問題

d = [74000; 56000; 10500; 25000; 17500; 196000; 5000]

d = 

    74000 
    56000 
    10500 
    25000 
    17500 
    196000 
    5000 

DIFF = I - 甲

Diff = 

0.8412 -0.0064 -0.0025 -0.3404 -0.0014 -0.0083 -0.1594 
-0.0057 0.7355 -0.0436 -0.0099 -0.0083 -0.0201 -0.3413 
-0.0264 -0.1506 0.6443 -0.0139 -0.0142 -0.0070 -0.0236 
-0.3299 -0.0565 -0.0495 0.6364 -0.0204 -0.0483 -0.0649 
-0.0089 -0.0081 -0.0333 -0.0295 0.6588 -0.0237 -0.0020 
-0.1190 -0.0901 -0.0996 -0.1260 -0.1722 0.7632 -0.3369 
-0.0063 -0.0126 -0.0196 -0.0098 -0.0064 -0.0132 0.9988 

八月= [DIFF,d]

Aug = 

1.0e+05 * 

0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.7400 
-0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.5600 
-0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.1050 
-0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.2500 
-0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 -0.0000 0.1750 
-0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 1.9600 
-0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000 0.0500 

回答

1

MATLAB是舍入的任何值。如果您在顯示Aug時查看左上角,則會看到(1.0e+05)這表示所顯示的所有值均爲實際值除以1e5(固定十進制浮點表示法)。由於您將較大的值(A)連接到相對較小的值(Diff),所以小數值的有效數字不會顯示,因爲您沒有顯示足夠的小數點。因此,它們看起來像0.這是您的命令窗口顯示數字的方式的一個僞影。

您可以將change the display format轉換爲其他內容,例如通常用於大數據範圍(默認爲「short」)的「shortg」,您將看到數據未被舍入。

format shortg 

[Diff, d] 

    0.8412  -0.0064  -0.0025  -0.3404  -0.0014  -0.0083  -0.1594  74000 
    -0.0057  0.7355  -0.0436  -0.0099  -0.0083  -0.0201  -0.3413  56000 
    -0.0264  -0.1506  0.6443  -0.0139  -0.0142  -0.007  -0.0236  10500 
    -0.3299  -0.0565  -0.0495  0.6364  -0.0204  -0.0483  -0.0649  25000 
    -0.0089  -0.0081  -0.0333  -0.0295  0.6588  -0.0237  -0.002  17500 
    -0.119  -0.0901  -0.0996  -0.126  -0.1722  0.7632  -0.3369  1.96e+05 
    -0.0063  -0.0126  -0.0196  -0.0098  -0.0064  -0.0132  0.9988   5000 

一般而言,您應該很少依賴MAT​​LAB命令窗口輸出。如果你認爲你的數據是四捨五入的,那麼你實際上想要明確地測試它。

data = [Diff, d]; 
isequal(Diff, data(:,1:end-1)) 

    1