编辑:我按建议使用了探查器,看起来Matlab花了大量时间处理符号和求解方程组。所以,我会稍微改变一下我的问题:是否有更快的方法来实现这个方程组,也许是一个不涉及声明符号的方法?
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
更具体地说,它看起来像一个函数mupadmex(我认为它与符号相关)占用了大约80%的计算时间。以上只是我在整个剧本中如何解决方程组的一个例子。
答案 0 :(得分:0)
感谢大家的回复!我最终使用了分析器,发现计算时间来自于每次程序经过循环时求解方程组。所以我使用了一个单独的脚本来象征性地求解方程,因此脚本只需要进行代数。它现在运行得更快。