在Matlab 2013中有效地评估符号表达

时间:2014-02-24 11:26:42

标签: 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是一个矩阵,其元素是符号表达式。我需要评估给定[a,b,c,d,e,f]的不同值的x,以得到数值矩阵fx。在我的真实计划中,这种评估需要实施数百万次,矩阵x的大小和参数的数量(a,b,...,d)都要大得多。

在Matlab 7.1中,我的程序运行良好。但是,当我在Matlab 2013b中运行它时,它变得非常慢。我发现“eval(x)”在7.1中比在2013b中运行得更快,因为它们在默认符号计算包(Maple for 7.1和M​​uPAD for 2013b)上有所不同。 所以我的问题是,在Matlab 2013b中使用函数“eval”是否有更有效的方法来评估符号表达式?

1 个答案:

答案 0 :(得分:0)

对于符号计算,我建议使用subs()代替eval()。如果使用subs(),您将获得全功率和符号准确性 当您使用eval()时,符号表达式将转换为字符串(如显示),然后使用MATLAB解析器和完整运行时来计算字符串的含义,使用正常的MATLAB双精度(或适当的MATLAB数字类型)。这个过程涉及MATLAB使用其JIT分析器等。它在计算上有点“沉重”。
请参阅subs()的MATLAB文档here