先来看一段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.88490.56610.1170-0.35910.46580.82430.99310.93331.0000]';
Ximage = [7.8013 -10.5825 -12.7495 4.806716.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 %显示当前运算精度
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