加载中…
个人资料
举举
举举
  • 博客等级:
  • 博客积分:0
  • 博客访问:469,214
  • 关注人气:272
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

matlab控制运算精度函数digits(A)和vpa(B)的使用方法

(2010-06-10 21:23:00)
标签:

杂谈

    format这个函数不是用于控制运算精度的,它只能控制结果显示类型。运算的时候还是用matlab自己的精度,具体是多少就不知道了。

 

  matlab控制运算精度用的是digitsvpa这两个函数。

 

  digits用于规定运算精度,比如:

 

  digits(20);

 

  这个语句就规定了运算精度是20位有效数字。但并不是规定了就可以使用,因为实际编程中,我们可能有些运算需要控制精度,而有些不需要控制。vpa就用于解决这个问题,凡是用需要控制精度的,我们都对运算表达式使用vpa函数。例如:

 

  digits(5);

 

    a=vpa(sqrt(2));

 

  这样a的值就是1.4142,而不是准确的1.4142135623730950488016887242097......

 

  又如:

 

  digits(5);

 

    a=vpa(sqrt(2));

 

  b=sqrt(2);

 

  这样a的值是1.4142b没有用vpa函数,所以b1.4142135623730950488016887242097......

 

  vpa函数对其中每一个运算都控制精度,并非只控制结果。

 

  digits(11);

 

  a=vpa(2/3+4/7+5/9);

 

  b=2/3+4/7+5/9;

 

  a的结果为1.7936507936b的结果为1.793650793650794......也就是说,计算a的值的时候,先对2/34 /75/9这三个运算都控制了精度,又对三个数相加的运算控制了精度。而b的值是真实值,对它取11位有效数字的话,结果为1.7936507937,与a不同,就是说vpa并不是先把表达式的值用matlab本身的精度求出来,再取有效数字,而是每运算一次,都控制精度。我举的例子不太好,因为加法不太会增加数字位数。希望大家能理解我的意思....

 

  vpa对它括起来的运算每一次都控制精度,但有一点需要注意,vpa对函数的参数不起作用。

 

  举一个例子:

 

  digits(5);

 

  a=vpa(sqrt(2/3));

 

  b=vpa(sqrt(vpa(2/3)));

 

  结果a0.81649b.81650sqrt是一个函数,2/3是参数,也就是说,a式中,vpa2/3是不起作用的,只对sqrt函数的返回值作用。如果想达到2/3的精度也要控制的效果,就要用b式,对参数也使用vpa函数。

 

  还有一点,digits这个函数不是必需的,vpa可以这样用:

 

  vpa(表达式,运算精度);

 

  举例来说:

 

  vpa(pi,5);

 

  和

 

  digits(5);

 

  vpa(pi);

 

  结果是一样的,vpa不指定运算精度,就用digits函数指定的。如果也没有用digits函数,那就是按matlab本身的精度来运算。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有