2017-02-22 11 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' * 5つの*有効桁数を持っており、あなただけ私はあなたがそのラインを使用している場合には、エラー' max_number'を固定2. – Suever

答えて

1

の第2の入力を使用したいと思うので、数-137.08は実際に signficant数字を持っています。 docsから:

VPA(X、d)のそれは少なくとも言うことを注意

少なくともD桁で使用しています。それで、あなたは2桁の有効数字を求めたときに377になってしまいます。

重要な数字がわからないようです。 Wikipediaから:

数の有効数字は、その測定分解能に貢献 を意味運ぶ数字があります。これには、 を除くすべての数字が含まれます。

  • すべての先行ゼロ;
  • 数字の縮尺を示すためのプレースホルダだけの場合は末尾に0を付けます(正確な数字は 有効数字の識別時に説明されています)。
  • たとえば、元のデータの精度よりも高い精度で計算を実行したり、機器がサポートする精度よりも高い精度で測定された測定値 などの偽数値が導入されました。

だからあなたは今、この

>> 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を要求しているを使用することができます。私はまた、コードのその部分について簡単な説明を追加しました。 – iled

1

second inputvpaない小数点後の値の数と同じであるnumber of significant digitsあります。あなたはあなたが正しくvpaを使用していない5

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

私は少し敏感でなかったことをごめんねえ。貴重なご意見ありがとうございます。 –

関連する問題