在Matlab中使用symfun和匿名函数有什么区别?哪一个更好,即更快?看起来,我可以同时使用符号和实数。
Here他们讨论了内联函数和匿名函数之间的区别,但没有提到symfun。
答案 0 :(得分:4)
基本MATLAB功能用于数值计算,即使用浮点数。默认情况下,MATLAB变量和函数是数字的,这就是为什么在链接的讨论中只比较内联函数和匿名函数。
但是,使用符号数学工具箱可以使用符号表达式和函数。这对于解决数学问题非常有用,例如精确区分,积分,使用任意精度算术或求解方程。然而,符号引擎设计为智能,而不是快速(毕竟,符号引擎迟早必须执行函数的评估,但MATLAB 设计对数值问题有效)。只要有可能,人们应该更喜欢数值MATLAB函数,特别是那些通常可以扩展到以矢量化方式工作,沿阵列输入提供数组输出。
当面临混合问题(需要符号数学,但也需要计算成本昂贵的结果评估)时,以参数(符号)方式一次解决初始问题可能是最实际的,然后通过将其转换为适当的数值函数来使用最后的结果。您应该查看符号数学工具箱的matlabFunction
函数,该函数执行此操作并且对于合理缩放的函数非常有效(但here's是一个反例)。
请注意,虽然您可以使用公式定义匿名函数,如f=@(x) 3*x^2-2
中所示,但这实际上将定义一个数字函数,该函数返回给定数字输入的值,例如f(3)
。如果您手中有要计算的公式,请始终使用数值函数。符号数学应保留用于无法通过基本数字特征精确求解的情况,例如计算多元标量场的精确梯度。