0
我正在研究Matlab中的代碼,它涉及到一個方程組的系統圖形解決方案。現在,我知道這樣做的唯一方法是這樣的:Matlab解決前循環方程式的系統更快
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
沒有任何人有任何想法:此外,由於這是一個矩陣的問題,這裏的另一個代碼,竟然放棄了我類似的問題,因爲我知道有可能是一個簡單的方法來進行此事?
你爲什麼用象徵性的模式下運行無論如何?如果你堅持有象徵符號,那麼你爲什麼要使用循環? – Bernhard
如果您有並行化工具箱,則可以使用parfor – Trogdor