在Matlab2013中有效地计算符号表达式

在Matlab2013中有效地计算符号表达式,matlab,Matlab,我对符号表达式的数值计算有一个问题。为了简化我的问题。我写下面几行作为例子 syms a b c d e f x = [a+b*c+d^e,b+log(c+d);exp(c)*b/c+f,f*c+e^2]; a = 2; b = 3; c = 1.5; d = 1; e = -2; f = -1; fx = eval(x); x是一个矩阵,其元素是符号表达式。我需要计算x,给定不同的[a,b,c,d,e,f]值,得到一个数值矩阵fx。在我的实际程序中,这种评估需要执行数百万次,矩阵x的大小

我对符号表达式的数值计算有一个问题。为了简化我的问题。我写下面几行作为例子

syms a b c d e f
x = [a+b*c+d^e,b+log(c+d);exp(c)*b/c+f,f*c+e^2];

a = 2;
b = 3;
c = 1.5;
d = 1;
e = -2;
f = -1;

fx = eval(x);
x是一个矩阵,其元素是符号表达式。我需要计算x,给定不同的[a,b,c,d,e,f]值,得到一个数值矩阵fx。在我的实际程序中,这种评估需要执行数百万次,矩阵x的大小和参数a、b、…、d的数量都要大得多

在Matlab7.1中,我的程序运行良好。然而,当我在Matlab2013b中运行它时,它变得非常慢。我发现evalx在7.1中的运行速度比在2013b中快,这是因为它们在默认符号计算包Maple(7.1)和MuPAD(2013b)中的差异。
所以我的问题是,有没有比在Matlab2013b中使用函数eval更有效的方法来计算符号表达式

对于符号计算,我建议使用subs而不是eval。如果你使用潜艇,你会得到完全的力量和符号准确性。 使用eval时,符号表达式将转换为字符串,如显示的字符串,然后应用MATLAB解析器和完整运行时,使用普通的MATLAB双精度或适当的MATLAB数值类型来计算字符串的含义。这个过程涉及MATLAB使用其JIT分析器等。计算起来有点繁琐。
有关SUB,请参阅MATLAB文档。

Hi,我发现“SUB”比“eval”慢。但是,我的问题可以通过使用“y=matlabFunctionx”来解决,它创建了一个带有输入参数“a、b、c、d、e、f”的函数句柄“y”。这种修改节省了大约1/3的计算时间。