加快用符号表达式求解方程

时间:2017-06-06 03:35:23

标签: matlab

我正在尝试使用符号(syms)表达式求解方程,然后使用eval计算表达式。该计划工作正常,但需要很长时间。我知道使用syms会降低速度,有什么方法可以加快这个过程吗?我想知道使用函数将符号表达式放在其中然后调用此函数。我不知道这是否会有所帮助或如何做到这一点。任何其他建议都非常感谢。

我使用了以下代码

clear;
clc;
syms A B C D E ; 
R=((4*B*A)/((D-C)^2+(B+A)^2));
R1=((4*B*A)/((D+C)^2+(B+A)^2));
F1 = ellipticK(R);
I1 = ellipticE(R);
F2 = ellipticK(R1);
I2 = ellipticE(R1);
P= ((((A*B)^(1/2))/(2*E*(R^(1/2))))*(((2 - R)*F1) -...
    (2*I1)))-(((((A*B)^(1/2))/(2*E*(R1^(1/2)))))* ...
    (((2 - R1)*F2) - (2*I2)));
P1=feval(symengine,'simplify',P,'IgnoreAnalyticConstraints');

X=(1/B)*(diff(P1,D));
X1=feval(symengine,'simplify',X,'IgnoreAnalyticConstraints');
M(:)=0;
for i=1:10000
    A=L1(i);B=L2(i);C=L3(i);D=L4(i);E=L5(i);
    M(i) = (eval(X1))*0.13; 
end

1 个答案:

答案 0 :(得分:1)

您可以使用matlabFunction将问题首先转换为函数句柄,如下所示:

F = matlabFunction(X1);
M = F(L1, L2, L3, L4, L5)*0.13;

这使你的代码快〜100倍。

请注意,您还可以使用'File' argument

将您的功能导出到脚本文件
matlabFunction(f,'File','myFunction.m')