fsolve 和 solve/vpasolve 之间的区别
Differences between fsolve and solve/vpasolve
我必须在 MATLAB 中求解一个包含 2 个方程和 2 个未知数的非线性方程组。我曾经使用 vpasolve
来求解系统,但有人告诉我这种方法不是很有效,我不应该滥用 MATLAB 中的符号编程,我应该改用 fsolve
。这是否每次都成立?使用 fsolve
和 vpasolve
在精度和性能方面有什么区别?
基本上这就是何时使用可变精度算术 (vpa) 与浮点算术的问题。浮点运算使用常量精度,最常见的类型是 64bit double,你的 cpu 支持它,因此可以快速执行。当您需要比 double 更高的精度时,您可以切换到更高的位长度,但这需要您知道您需要哪种精度。 vpa
允许您以相反的方式执行此操作。使用 digits
指定结果的精度,符号工具箱将以足够的精度执行所有中间步骤。
fzero
产生重大错误的示例:
f=@(x)log(log(log(exp(exp(exp(x+1))))))-exp(1)
vpasolve(f(sym('x')))
fsolve(f,0)
我必须在 MATLAB 中求解一个包含 2 个方程和 2 个未知数的非线性方程组。我曾经使用 vpasolve
来求解系统,但有人告诉我这种方法不是很有效,我不应该滥用 MATLAB 中的符号编程,我应该改用 fsolve
。这是否每次都成立?使用 fsolve
和 vpasolve
在精度和性能方面有什么区别?
基本上这就是何时使用可变精度算术 (vpa) 与浮点算术的问题。浮点运算使用常量精度,最常见的类型是 64bit double,你的 cpu 支持它,因此可以快速执行。当您需要比 double 更高的精度时,您可以切换到更高的位长度,但这需要您知道您需要哪种精度。 vpa
允许您以相反的方式执行此操作。使用 digits
指定结果的精度,符号工具箱将以足够的精度执行所有中间步骤。
fzero
产生重大错误的示例:
f=@(x)log(log(log(exp(exp(exp(x+1))))))-exp(1)
vpasolve(f(sym('x')))
fsolve(f,0)