在Matlab矩阵中设置精度元素

时间:2017-02-22 00:19:49

标签: matlab precision

我想为矩阵的所有元素设置精度。以下是我的所作所为:

>>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。 请帮忙建议我如何获得它。 非常感谢你!

3 个答案:

答案 0 :(得分:1)

second inputvpanumber of significant digits与小数点后的值数相同。数字-137.08实际上有五个显着位数,因此您需要使用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 :(得分:1)

您没有正确使用vpa。来自docs

  

vpa(x,d)至少使用d个有效数字

Nota表示至少。这就是为什么当你只询问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是您想要的小数位数。

答案 2 :(得分:-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