在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。
请帮我建议如何得到它。
非常感谢你 tovpa
是与基点后的值的数目不同的值。数字-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