MATLAB:为什么符号替换如此缓慢以及更快的替代方案是什么?

时间:2016-09-11 18:27:45

标签: matlab

在我的机器上,以下代码:

for i=1:200
    1+2+5;
end;

以0.000180秒的速度运行。

现在,这段代码:

syms x y z
f(x,y,z) = x + y+z;

for i=1:200
    f(1,2,5);
end;

慢得多(6.193909秒)。

对于我的代码,我需要编写3个变量的几个复杂函数的导数,然后插入给定域中的所有整数点。这将有助于A LOT能够进行符号区分然后插入,但这看起来非常缓慢。

除了手动完成所有操作之外还有其他选择吗(手工编写完整衍生产品)?

2 个答案:

答案 0 :(得分:5)

您可以使用matlabFunction来加快计算速度:

syms x y z
f(x,y,z) = x + y+z;
h= matlabFunction(f);
for i=1:200
    h(1,2,5);
end;

答案 1 :(得分:1)

这不是一个公平的比较,因为在第一个中你使用的是小整数而没有函数调用。

tic,for i = 1:200 f(1,2,5); end;toc % 1.355852 on average

g = @(x,y,z) x + y + z;
tic,for i = 1:200 g(1,2,5); end;toc % 0.000231 on average

syms x y z real
f(x,y,z) = x + y+z;
h = matlabFunction(f);
tic,for i = 1:200 g(1,2,5); end;toc % 0.000233 on average

不管。你应该根据你的应用,以不同的复杂程度在数字上评估衍生物。