EDIT: Ich habe den Profiler wie vorgeschlagen verwendet, und es sieht aus wie Matlab verbrachte eine erhebliche Menge an Zeit mit Symbolen und die Lösung des Systems von Gleichungen. Also werde ich meine Frage etwas ändern: Gibt es einen schnelleren Weg, dieses System von Gleichungen zu implementieren, vielleicht eines, das keine Deklaration von Symbolen beinhaltet?MATLAB-Skript läuft langsam: System der Gleichungen lösen
function [As_rad, Ae_rad] = pos_to_angle(x_pos, y_pos)
% Converts given x and y coordinates into angles (using link lengths)
Ls = 0.4064; % in meters
Le = 0.51435; % in meters
x_offset = 0.0;
y_offset = -0.65; % from computer running the robot
syms angle_s angle_e
x = x_pos + x_offset; % Account for offset of origins
y = y_pos + y_offset; % between motor and workspace
eqn1 = x == Ls*cos(angle_s) + Le*cos(angle_e); % Actual conversion
eqn2 = y == Ls*sin(angle_s) + Le*sin(angle_e);
sol1 = solve([eqn1, eqn2], [angle_s, angle_e]);
As_rad_mat = sol1.angle_s;
Ae_rad_mat = sol1.angle_e;
if As_rad_mat(1) > Ae_rad_mat(1);
As_rad = As_rad_mat(1);
Ae_rad = Ae_rad_mat(1);
else
As_rad = As_rad_mat(2);
Ae_rad = Ae_rad_mat(2);
end
end
Um genauer zu sein, es sah aus wie eine Funktion mupadmex (was ich glaube, mit Symbolen zugeordnet ist) etwa 80% der Rechenzeit aufnahm. Das Obige ist nur ein Beispiel dafür, wie ich das Gleichungssystem im ganzen Skript gelöst habe.
[Profil Ihren Code] (http://www.mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html) – excaza
Die wichtigsten Funktionen in Ihrer 'for'-Schleife haben wir keinen Zugriff Daher können wir auf keinen Fall herausfinden, warum es bei jeder Iteration Ihres Codes immer langsamer wird. Das Problem ist offensichtlich etwas, das in den Funktionen selbst enthalten ist. Entweder zeigen Sie uns den Code für jede Funktion, oder als was excaza erwähnt ... profile deinen Code. – rayryeng
Was Sie lösen, ist ein nichtlineares System von Gleichungen, da die zu lösenden Variablen Argumente in nichtlineare Funktionen sind. 'Solve' ist so ziemlich die einzige Möglichkeit, hierher zu kommen. – rayryeng