2017-06-06 7 views
0

記号式(syms)式を使って方程式を解き、evalを使って式を評価しようとしています。プログラムは正常に動作していますが、時間がかかります。私はsymsを使用して速度が低下することを知っています、私はプロセスをスピードアップできる方法はありますか?私は、この関数を呼び出して、その中に象徴的な表現を置くために関数を使うことについて不思議に思っていました。それが助けになるか、それをどうやって行うのかは分かりません。他の提案は非常に感謝しています。記号式を使って方程式を解く速度を速める

私はあなたが以下のようにmatlabFunctionを使用して、関数ハンドルに最初にあなたの問題を変換することができ

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。ありがとうございました。これはコードの一部です。私はそれらを1次元行列であるL1、L2、L3、L4、L5から得ています。私はコードを更新する – user6052232

答えて

1

以下のコードを使用:

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

これはあなたのコードは〜100倍速くなります。あなたも使用して、スクリプトファイルにあなたの関数をエクスポートすることができ

'File' argument

matlabFunction(f,'File','myFunction.m') 
関連する問題