2017-02-22 54 views
0

我想要爲矩陣的所有元素設置精度。下面是我所做的:在Matlab矩陣中設置精度元素

>>A 

A = 

     0 1.0000   0   0   0   0 
-137.0830   0   0   0   0   0 
     0   0   0 1.0000   0   0 
    365.5546   0   0   0   0   0 
     0   0   0   0   0 1.0000 
    365.5546   0   0   0   0   0 

>> vpa(A,2) 

ans = 

[  0, 1.0, 0, 0, 0, 0] 
[ -144.0, 0, 0, 0, 0, 0] 
[  0, 0, 0, 1.0, 0, 0] 
[ 377.0, 0, 0, 0, 0, 0] 
[  0, 0, 0, 0, 0, 1.0] 
[ 377.0, 0, 0, 0, 0, 0] 

結果是不是我的願望,它應該是: -137.08,365.55,365.55的第一列。 請幫我建議我如何得到它。 非常感謝!

+0

'137.08'有五個* *顯著數字,你只要求2 – Suever

回答

1

第二輸入。從docs

VPA(X,d)使用至少d顯著數字

諾塔,它說至少。這就是爲什麼當你只要求2位有效數字時你仍然可以得到377。

看來你不知道有效數字是什麼。從Wikipedia

一個數字的有效數字是攜帶意義 貢獻其測量分辨率的數字。這包括所有數字 除外:

  • 所有前導零;
  • 僅當佔位符指示數字的比例時纔跟蹤零(具體規則在確定 有效數字時解釋);和
  • 例如通過計算精度高於原始數據的計算引入虛假數字,或者報告的精度高於設備支持的精度。

所以,你想這個

>> vpa(365.5546, 5) 
ans = 
365.55 

現在,是一致的,你需要找出什麼是最大的矩陣,並從那裏compute the desired number of significant digits

max_number = floor(log10(max(abs(A(:))+1)) + 1); 
decimals = 2; 
vpa(A, max_number + decimals) 

這裏,max_number是的,你的矩陣具有整數的最大位數,而decimals是你想有小數位的數量。

+0

@greenworld我固定一個錯誤'max_number',如果你正在使用的線。我還在該部分代碼中添加了一個簡短的說明。 – iled

1

second inputvpanumber of significant digits,其是未相同值的小數點後的位數。數-137.08實際上有 signficant位,所以你需要使用你沒有正確使用vpa5

vpa(A, 5) 

% [  0, 1.0, 0, 0, 0, 0] 
% [ -137.08, 0, 0, 0, 0, 0] 
% [  0, 0, 0, 1.0, 0, 0] 
% [ 365.55, 0, 0, 0, 0, 0] 
% [  0, 0, 0, 0, 0, 1.0] 
% [ 365.55, 0, 0, 0, 0, 0] 
-1

vpa(x,d)d是有效數字,而不是小數位。

pvalue = vpa(-137.0830); 
twopvalue = vpa(-137.0830,2); 

% pvalue = -137.08299999999999840838427189738 
% twopvalue = -144.0 

如果您想在第一列中獲得-137.08,365.55,365.55。您可以使用roundn(A,-2)

roundn(A,-2) 

ans = 

     0 1.0000   0   0   0   0 
-137.0800   0   0   0   0   0 
     0   0   0 1.0000   0   0 
    365.5500   0   0   0   0   0 
     0   0   0   0   0 1.0000 
    365.5500   0   0   0   0   0 
+0

如果你知道有效數字和小數位之間的差異,你怎麼建議他使用'round'?查看'round(0.001,2)'和'vpa(0.001,2)'之間的區別。 – iled

+0

對不起,我有點不敏感。感謝您的寶貴意見。 –