0
EDIT:私はプロファイラーを示唆したように使用しました.Matlabは記号を扱い、方程式系を解くのにかなりの時間を費やしていたようです。だから私は少し質問を変えます:この方程式のシステムを実装するためのより速い方法がありますか、おそらく記号を宣言することを含まないものでしょうか?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%を占めましたように、それが見えました。上記は、スクリプトを通して方程式のシステムをどのように解決したかの例です。
[プロファイルコード](http://www.mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html) – excaza
'for'ループの主な機能はアクセスできませんそれで、あなたのコードを繰り返し実行するたびに徐々に遅くなっている理由はわかりません。この問題は明らかに、関数そのものに含まれているものです。それぞれの関数のコードを表示するか、excazaの記述どおりにコードをプロファイルします。 – rayryeng
あなたが解決しようとしているのは、非線形関数への引数なので、方程式の非線形システムです。 'solve'はここに行く唯一の方法です。 – rayryeng