很多人学习matlab的时候往往会忽视matlab运算的精度问题,然后导致写出来的程序往往算不出理想的结果,举几个例子,这个是我在matlab贴吧看到一位同学求救(http://tieba.baidu.com/p/4130057069),他的程序没错,但是总是算不出理想的结果:
count=0
n=1000
for i=1:n
a=rand(1,1);
if (cos(a))^2+(sin(a))^2<=1
count=count+1
end
end
count/n
算出来的count/n总是小于1的。这就是典型的运算精度造成的问题,只要将判断语句改成(cos(a))^2+(sin(a))^2<=1.0001即可。
还有个例子是有同学在matlab气象家园里问的,他写了一个很长的程序,但是总是算不出他想要的结果,然后他花了很长时间才找到原因,他误以为ceil(0.1*12*10)的结果是12,其实不然,算出来是13,ceil(0.1*10*12)算出来才是12,为什么会这样?原因在下图,a其实是一个比12大一点点的数,向无穷取整自然是13啦。
这一切都和浮点数在计算机中的存储有关。不仅仅是matlab,其他任何计算机语言都是如此,都算不出正确的结果来。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks ,Hyperworks, Protel,CAXA,OpenWorks LandMark,MATLAB,Enovia,Winchill,TeamCenter,MathCAD,Ansys, Abaqus,ls-dyna, Fluent, MSC,Bentley,License,UG,ug,catia,Dassault Systèmes,AutoDesk,Altair,autocad,PTC,SolidWorks,Ansys,Siemens PLM Software,Paradigm,Mathworks,Borland,AVEVA,ESRI,hP,Solibri,Progman,Leica,Cadence,IBM,SIMULIA,Citrix,Sybase,Schlumberger,MSC Products...