matlab精度转化为整形,转matlab运算精度

本文详细介绍了如何在MATLAB中使用digits和vpa函数来控制运算精度,尤其是在涉及浮点数计算和函数调用时的精度控制技巧。重点讲解了vpa函数如何在每次运算中保持指定的精度,以及与digits函数的区别和配合使用的方法。
摘要由CSDN通过智能技术生成

假如运算精度是4位有效数字,那么我们计算1/3时,结果应该为0.3333,而圆周率就是3.142。这其实很好理解,我们只要在求解的过程中每一次运算都保留4位有效数字就行了,关键在于怎么用matlab实现。

首先声明一点,format这个函数不是用于控制运算精度的,它只能控制结果显示类型。运算的时候还是用matlab自己的精度,具体是多少就不知道了,但肯定不只几十位吧....

据我所知,控制运算精度用的是digits和vpa这两个函数,我大致说一下,具体的大家可以看matlab的帮助。

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.4142,b没有用vpa函数,所以b是1.4142135623730950488016887242097......

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

digits(11);

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

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

a的结果为1.7936507936,b的结果为1.793650793650794......也就是说,计算a的值的时候,先对2/3,4

/7,5/9这三个运算都控制了精度,又对三个数相加的运算控制了精度。而b的值是真实值,对它取11位有效数字的话,结果为1.7936507937,

与a不同,就是说vpa并不是先把表达式的值用matlab本身的精度求出来,再取有效数字,而是每运算一次,都控制精度。我举的例子不太好,因为加法不

太会增加数字位数。希望大家能理解我的意思....

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

举一个例子:

digits(5);

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

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

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

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

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

举例来说:

vpa(pi,5);

digits(5);

vpa(pi);

结果是一样的,vpa不指定运算精度,就用digits函数指定的。如果也没有用digits函数,那好象就是按matlab本身的精度来算的吧,这点我没试验,觉得不重要....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值