Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab矩阵中设置一个元素的精度_Matlab_Precision - Fatal编程技术网

在Matlab矩阵中设置一个元素的精度

在Matlab矩阵中设置一个元素的精度,matlab,precision,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

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

>>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.08365.55365.55。 请帮我建议如何得到它。 非常感谢你

to
vpa
是与基点后的值的数目不同的值。数字
-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]

您没有正确使用
vpa
。从:

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

至少它没有说。这就是为什么当你只要求2个有效数字时,你仍然得到377

似乎您不知道什么是有效数字。发件人:

数字的有效数字是具有意义的数字 有助于其测量分辨率。这包括所有数字 除:

  • 所有前导零
  • 尾随零,当它们仅仅是占位符以指示数字的比例时(确切规则在识别时解释) 重要数字);及
  • 例如,通过比原始数据或测量值精度更高的计算引入的假数字 报告的精度高于设备支持的精度
所以你想要这个

>> vpa(365.5546, 5)
ans =
365.55
现在,为了保持一致,你需要找出矩阵的最大值是多少,然后从那里开始

max_number = floor(log10(max(abs(A(:))+1)) + 1);
decimals = 2;
vpa(A, max_number + decimals)
这里,
max\u number
是矩阵的最大整数位数,
decimals
是您想要的小数位数。

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)


137.08
有五个有效数字,而您只要求2。如果您知道有效数字和小数位数之间的差异,您为什么建议他使用
四舍五入
?查看
轮(0.001,2)
vpa(0.001,2)
之间的差异。很抱歉,我有点麻木不仁。感谢您的宝贵意见。@greenworld我修复了一个错误
max\u number
,以防您使用该行。我还对代码的这一部分做了简短的澄清。
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