2016-06-13 7 views
0

私はMatlabのコードで、方程式系の解をグラフ化することに取り組んでいます。今、私が知っている唯一の方法は次のようなものです:Matlabはforeループで方程式の解をより速く解く

E = 200000; v = .3;  
S = [1/E, -v/E, -v/E; 
-v/E, 1/E, -v/E; 
-v/E, -v/E, 1/E]; 
e1 = linspace(0,eu,52); 
sig10 = zeros(size(e1)); 
syms e2; syms e3; syms sig1; 

a = 0; 
for k = 1:52 
    sig = (S^-1)*[e1(k); e2; e3]; 
    eq1 = sig(3,1) == 0; 
    eq2 = sig(2,1) == a*sig1; 
    eq3 = sig(1,1) == sig1; 
    [solsig, sol2, sol3] = solve([eq1, eq2, eq3], [sig1, e2, e3]); 
    sig10(1,k) = solsig; 
end 

このようないくつかのループがあります。それは動作しますが、実行には永遠にかかります。私はループの外でシステムを象徴的に解決しようとしましたが、必要なk変数に戻す方法を理解できません。私はそれが行列の問題ですので、これについて移動する簡単な方法があるかもしれません実現するため、また、ここでは私に同様の問題を与えている別のコードがあります:

syms tous; syms sigs1; syms sigs2; 
sigxhill = zeros(1,361); 

for t=0:360 
    alpha = t; 
    eq1 = sigsx == sig1*cosd(alpha)^2+sigs2*sind(alpha)^2; 
    eq2 = 0 == sig1*sind(alpha)^2+sigs2*cosd(alpha)^2; 
    eq3 = tous == (sig1 - sigs2)*sind(alpha)*cosd(alpha); 
    eq4 = 2*sig0^2 == F*sigys^2+G*sigsx^2+H*(sigsx-sigsy)^2+2*N*tous^2; 
    sol1 = solve([eq1, eq2, eq3, eq4], [sigsx, tous, sigs1, sigs2]); 
    sigxhill(1,t+1) = sol1.sigsx(1); touhill(1,t+1) = sol1.tous(1); 
    sig1hill(1,t+1) = sol1.sigs1(1); sig2hill(1,t+1) = sol1.sigs2(1); 
end 

誰もが任意のアイデアを持っていますか?

+0

は、なぜあなたはとにかくシンボリックモードで実行されている:

にもいくつかの詳細についてはマニュアルを参照してください?シンボリックな表記法を主張するなら、なぜループを使用しますか? – Bernhard

+0

あなたは並列化ツールボックスを持っているならば、parforを使うことができます – Trogdor

答えて

1

Symbolic Math Toolboxがインストールされていないため、残念ながらコードを実行できません。しかしthoses例で起動するには良い方法MATLABプロファイラを使用している:

profile on; 
E = 200000; v = .3;  
S = [1/E, -v/E, -v/E; 
-v/E, 1/E, -v/E; 
-v/E, -v/E, 1/E]; 
e1 = linspace(0,eu,52); 
sig10 = zeros(size(e1)); 
syms e2; syms e3; syms sig1; 

a = 0; 
for k = 1:52 
    sig = (S^-1)*[e1(k); e2; e3]; 
    eq1 = sig(3,1) == 0; 
    eq2 = sig(2,1) == a*sig1; 
    eq3 = sig(1,1) == sig1; 
    [solsig, sol2, sol3] = solve([eq1, eq2, eq3], [sig1, e2, e3]); 
    sig10(1,k) = solsig; 
end 
profile viewer; 

これはあなたの実行時間のほとんどを必要とするコードの一部に関するいくつかの追加情報を与える必要があります。

http://de.mathworks.com/help/matlab/ref/profile.html