Matlab 符号计算和任意精度计算

                     

贡献者: addis

预备知识 Matlab 的程序调试及其他功能

   Matlab 的符号计算需要符号计算工具箱,取决于你的证书类型,可能需要额外购买。另外需要提醒的是,虽然 Matlab 和 Python 都有符号计算功能,但在符号计算领域 Mathemtica 才更为主流,其默认界面也更适合符号计算。

1. 符号变量和符号表达式

符号替换

2. 变精度计算

   注意变精度计算功能往往和符号计算一同使用,但这两个功能从实现来看是完全不同的。变精度计算和双精度一样本质上还是数值浮点计算,计算过程存在数值误差。只不过我们可以规定每个变量的有效数字为任意多,而不是统一使用双精度类型的 15-16 位有效数字。

   Matlab 的变精度计算并不自带误差追踪功能,例如两个十分相近的数相减,返回的小数位中可能大部分都是错的。而 Mathematica 的做法是返回更少小数位,但保证最后一位是对的。

3. 特殊函数

   由于一些特殊函数若用双精度计算,往往在一些区间产生较大误差。所以 Matlab 决定只使用任意精度来计算。以复数域的 $\Gamma$ 函数 为例,若直接输入 gamma(1+1i) 则会出错,因为 Matlab 中非符号计算版本的 gamma 函数只支持 double 类型的实数输入。所以要调用符号计算工具箱提供的 gamma(),就输入一个 sym 类型的变量即可。例如 gamma(vpa(1+1i)) 返回 0.49801... - 0.15494...i,又例如 gamma(sym(1+1i)) 返回表达式 gamma(1 + 1i)。这是因为 vpa(1+1i) 是变精度浮点数,可以显示为小数,而 sym(1+1i) 不存在误差,不能显示为小数。当然,我们也可以用例如 vpa(gamma(sym(1+1i)), 50) 来求任意位有效数字。

                     

© 小时科技 保留一切权利