2017-06-06 54 views
0

我試圖用符號(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

那你覺得你做的時候'達到A = A(I); ...'在循環? 'A'不是被定義爲一個矩陣,所以不知道'A(i)'是什麼,然後即使它是你通過分配來摧毀它? – Wolfie

+0

@Wolfie。謝謝。這是代碼的一部分。我從L1,L2,L3,L4和L5中得到這些是一維矩陣。我更新了代碼 – user6052232

回答

1

你可以先改變你的問題使用matlabFunction如下的功能句柄:

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

這使得您的代碼〜快100倍。

請注意,您還可以將功能導出到一個腳本文件,使用'File' argument

matlabFunction(f,'File','myFunction.m')