Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 用符号表达式加速求解方程_Matlab - Fatal编程技术网

Matlab 用符号表达式加速求解方程

Matlab 用符号表达式加速求解方程,matlab,Matlab,我试图用符号符号表达式解一个方程,然后用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

我试图用符号符号表达式解一个方程,然后用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

您可以使用以下方法首先将问题转换为函数句柄:

F = matlabFunction(X1);
M = F(L1, L2, L3, L4, L5)*0.13;
这将使您的代码快约100倍

请注意,还可以使用以下命令将函数导出到脚本文件:


当你做A=Ai;…时,你认为你取得了什么成就;。。。消息灵通的反正A也不是矩阵,所以不确定Ai是什么,即使是,你也会通过赋值来破坏它?@Wolfie。非常感谢。这是代码的一部分。我从L1、L2、L3、L4和L5中得到它们,它们是一维矩阵。我更新代码
matlabFunction(f,'File','myFunction.m')