matlab编程问题
a=1/8*asin(2*(-cos(2*pi/3)))%得到0.1963b=pi/16%得到0.1963e=b-a%确是3.7253e-009为什么这样??怎么让pi/...
a=1/8*asin(2*(-cos(2*pi/3))) %得到0.1963
b=pi/16 %得到0.1963
e=b-a %确是3.7253e-009
为什么这样??
怎么让pi/16 - 1/8*asin(2*(-cos(2*pi/3))) 输出得到0呢??? 展开
b=pi/16 %得到0.1963
e=b-a %确是3.7253e-009
为什么这样??
怎么让pi/16 - 1/8*asin(2*(-cos(2*pi/3))) 输出得到0呢??? 展开
展开全部
1)计算机是用二进制来计算的,而你上述的所有结果都是十进制的结果,二进制运算是没法精确的给出十进制的结果的,给出的知识近似的值。
2)这种科学计算的值由于精度要求高,计算机默认的计算了很多位。你pi/16 和1/8*asin(2*(-cos(2*pi/3))) 得到的结果都是0.1963,但是这个是你取了小数点后面4位的精度,而在这个精度上这两个结果是相等的,但是你把精度放大,放到小数点后面10位或者更多,就可以看到这两个结果不相等。
3)如果你想让相减的结果为0,可以将两个结果的静定限制在%.4f ,这样的话只计算小数点后面的4位的值,也就是精度限制在小数点后面4位,就可以让他们的结果相等。
2)这种科学计算的值由于精度要求高,计算机默认的计算了很多位。你pi/16 和1/8*asin(2*(-cos(2*pi/3))) 得到的结果都是0.1963,但是这个是你取了小数点后面4位的精度,而在这个精度上这两个结果是相等的,但是你把精度放大,放到小数点后面10位或者更多,就可以看到这两个结果不相等。
3)如果你想让相减的结果为0,可以将两个结果的静定限制在%.4f ,这样的话只计算小数点后面的4位的值,也就是精度限制在小数点后面4位,就可以让他们的结果相等。
更多追问追答
追问
嗯,那我该怎么操作,使它等于0
追答
matlab中有两个函数用来限定长度:digits和vpa,digits用来指定计算精度,vpa用来格式化结果。
对于你的情况,应该这样写:
digits(4) //指定精度为4位
a=vpa(1/8*asin(2*(-cos(2*pi/3))) ) //vpa用来格式化计算结果为digits指定的精度
b=vpa(pi/16)
e=b-a
我没有matlab环境,你可以尝试下上面的代码,可能不对的地方是digits()这里4或者5,要看具体matlab怎么样定义精度。最后的结果那里如果算出来是0.0000,则再用digits(1)指定下精度为1,并用vpa格式化结果为1位的0
展开全部
你用如下代码:
format long
a=1/8*asin(2*(-cos(2*pi/3)))
b=pi/16
e=b-a
可以看到a,b是不一样的,所以得不到0.
format long
a=1/8*asin(2*(-cos(2*pi/3)))
b=pi/16
e=b-a
可以看到a,b是不一样的,所以得不到0.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
目前所有软件只有mathematics能算出精确答案,其他软件只能算出近似值!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询