Ich arbeite an Code in Matlab, die Grafiklösungen zu einem System von Gleichungen beinhaltet. Im Moment ist der einzige Weg, wie ich es mache, wie folgt:Matlab lösen das Gleichungssystem mit Fore-Loops schneller
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
Es gibt mehrere andere Schleifen wie diese. Es funktioniert, aber es dauert ewig, es auszuführen. Ich habe versucht, das System außerhalb der Schleife symbolisch zu lösen, aber ich kann nicht herausfinden, wie ich in die Variable k einfügen soll, wo sie benötigt wird. Auch, weil ich es realisieren könnte eine einfache Möglichkeit, um dies zu realisieren, da es sich um eine Matrix Problem, hier ist ein weiterer Code, der mir ähnliche Fragen hat zu geben:
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
Hat jemand irgendwelche Ideen?
Warum ohnehin in symbolischen Modus sind Sie? Wenn Sie darauf bestehen, die symbolische Notation zu haben, warum würden Sie dann eine Schleife verwenden? – Bernhard
Sie können Parfor verwenden, wenn Sie die Parallelisierungs-Toolbox haben – Trogdor