matlab的默认计算精度,MATLAB控制运算精度 | 学步园

先来看一段MATLAB代码

clear;

theta = 264.3783;

t1 = [cos(theta); cos(2*theta); cos(3*theta); cos(4*theta); sin(theta); sin(2*theta); sin(3*theta); sin(4*theta); 1];

t2 = [0.8849 0.5661 0.1170 -0.3591 0.4658 0.8243 0.9931 0.9333 1.0000];

Ximage = [7.8013 -10.5825 -12.7495 4.8067 16.3082 7.2674 1.5018 0.0946 -12.8618];

result1 = t1*Ximage;

result2 = t2*Ximage;

在MATLAB控制台下查看t1与t2的值是一样的,但是结果却相差很多:

result1 与result2 的值符号都变了,这是为什么呢?

原来MATLAB显示数据时,默认现实小数点后面4位,但实际运算所使用的精度并不是这样。

所以上述的t1和t2在计算时候,值并不相等; 之所以result1和result2符号都发生改变,是因为Ximage里某些值比较大的缘故。

其实这两个值,都是非常靠近原点0的两个值。

MATLAB中控制运算精度

format long 只能设置显示精度,并不能控制运算精度。

在MATLAB中,控制运算精度一般使用 digits 和 vpa。示例:

digits(n) %设定默认的精度

vpa(x,n) %表示将s表示为n位有效数的符号对象

如果不设定digits(n) ,系统默认为32位

需要注意:

1,vpa算出的值为符号变量,可以进行初等运算,但不能进行关系运算等;

2,vpa的运算速度比MATLAB标准函数要慢

MATLAB中四舍五入

采用函数 roundn(x,y) 例子

a=123.4567890;

a=roundn(a,-4)

% 返回 123.4568

先来看一段MATLAB代码 clear; theta = 264.3783; t1 = [cos(theta); cos(2*theta); cos(3*theta); cos(4*theta); sin(theta); sin(2*theta); sin(3*theta); sin(4*theta); 1]; t2 = [0.8849 0.5661 0.1170 -0.3591 0.4658 0.8243 0.9931 0.9333 1.0000]; Ximage = [7.8013 -10.5825 -12.7495 4.8067 16.3082 7.2674 1.5018 0.0946 -12.8618]; result1 = t1*Ximage; result2 = t2*Ximage; 在MATLAB控制台下查看t1与t2的值是一样的,但是结果却相差很多: result1 与result2 的值符号都变了,这是为什么呢? 原来MATLAB显示数据时,默认现实小数点后面4位,但实际运算所使用的精度并不是这样。 所以上述的t1和t2在计算时候,值并不相等; 之所以result1和result2符号都发生改变,是因为Ximage里某些值比较大的缘故。 其实这两个值,都是非常靠近原点0的两个值。 MATLAB中控制运算精度 format long 只能设置显示精度,并不能控制运算精度。 在MATLAB中,控制运算精度一般使用 digits 和 vpa。示例: digits(n) %设定默认的精度 vpa(x,n) %表示将s表示为n位有效数的符号对象 如果不设定digits(n) ,系统默认为32位 需要注意: 1,vpa算出的值为符号变量,可以进行初等运算,但不能进行关系运算等; 2,vpa的运算速度比MATLAB标准函数要慢 MATLAB中四舍五入 采用函数 roundn(x,y) 例子 a=123.4567890; a=roundn(a,-4) % 返回 123.4568
经验分享 程序员 微信小程序 职场和发展