满意答案
hunghsi
2013.09.23
采纳率:57% 等级:8
已帮助:61人
楼上的回答都没有切中实质。楼主的问题涉及到数值计算和符号运算的概念。
所谓MATLAB默认的数据类型是双精度浮点数(double),那是针对普通的数值计算而言的,按照IEEE 754的规范,双精度浮点数有52个尾数位,按十进制理解,大约有16位有效数字。
除了基本的数值计算之外,MATLAB还提供了符号数学工具箱(Symbolic Math Toolbox)。能够进行符号运算的软件称为“计算机代数系统”(Computer Algebra System),比较著名的计算机代数系统包括Maple、Mathematica等。MATLAB自身并不具备符号运算的能力,但通过其它的符号运算内核支持(早期用的是Maple,2008年之后改为MuPad),通过定义一套访问符号运算内核的接口函数,可以实现符号运算(也就是符号数学工具箱)。
符号运算的典型应用包括求函数微积分、极限、表达式的变形和化简等等,所求出的解是无误差的。符号运算还有一个重要应用,就是高精度求值,或者所谓任意精度算术(Arbitrary-precision arithmetic),MATLAB中称为可变精度算术(Variable precision arithmetic),也就是楼主所调用的vpa函数,理论上可以实现任意位有效数字的计算。
楼主所调用的digits和vpa函数都属于符号数学工具箱的函数,它们的实现并非通过MATLAB基本的双精度浮点数,这就是问题之所在。
至于说符号运算是怎样实现的,这个问题太宏大,楼主有兴趣的可以参考一下维基百科的一些内容:
http://zh.wikipedia.org/wiki/%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%BB%A3%E6%95%B0%E7%B3%BB%E7%BB%9F
http://zh.wikipedia.org/wiki/%E8%AE%A1%E7%AE%97%E6%9C%BA%E4%BB%A3%E6%95%B0%E7%B3%BB%E7%BB%9F%E6%AF%94%E8%BE%83
http://en.wikipedia.org/wiki/Arbitrary-precision
写了半个多小时,希望对楼主有帮助。
00分享举报