在 Matlab 中保存符号函数以提高效率

计算科学 matlab 数值分析 符号计算
2021-12-05 21:56:14

我有一个冗长的表达式,它是使用一个相当复杂的函数的符号微分计算的。我现在打算在 for 循环中多次调用这个结果(符号函数),所以我想避免每次迭代都必须执行符号微分步骤,而是我想“保存”符号微分的结果,所以在每个循环上我只是在评估一个函数。也许一个例子会有所帮助:这里我们尝试使用两种方法评估零的余弦。

syms x
f = sin(x);
fp = diff(f,x);
fp = @(x) subs(fp, 'x', x);

tic 
for i=1:1000
    fp(0);
end
toc

tic 
for i=1:1000
    cos(0);
end
toc

结果:

Elapsed time is 3.654296 seconds.
Elapsed time is 0.007301 seconds.

因此使用我的符号函数非常昂贵!有没有办法减轻这种昂贵的函数调用?

1个回答

使用该功能matlabFunction大大提高了效率!

syms x
f = sin(x);
fp = diff(f,x);
F = matlabFunction(fp);
tic 
for i=1:1000
    F(0);
end
toc

tic 
for i=1:1000
    cos(0);
end
toc

Elapsed time is 0.037475 seconds.
Elapsed time is 0.004203 seconds.

此外,如果需要将符号计算的结果保存为常规函数,我们可以简单地使用matlabFunction(fp, 'file', 'myfunction')它将结果保存到函数文件中。