现在的位置: 首页 > 综合 > 正文

MATLAB控制运算精度

2013年10月21日 ⁄ 综合 ⁄ 共 842字 ⁄ 字号 评论关闭

先来看一段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

抱歉!评论已关闭.