2016-06-24 8 views
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%を占めましたように、それが見えました。上記は、スクリプトを通して方程​​式のシステムをどのように解決したかの例です。

+4

[プロファイルコード](http://www.mathworks.com/help/matlab/matlab_prog/profiling-for-improving-performance.html) – excaza

+2

'for'ループの主な機能はアクセスできませんそれで、あなたのコードを繰り返し実行するたびに徐々に遅くなっている理由はわかりません。この問題は明らかに、関数そのものに含まれているものです。それぞれの関数のコードを表示するか、excazaの記述どおりにコードをプロファイルします。 – rayryeng

+0

あなたが解決しようとしているのは、非線形関数への引数なので、方程式の非線形システムです。 'solve'はここに行く唯一の方法です。 – rayryeng

答えて

0

返信ありがとうございました!私はプロファイラを使用して終了し、計算時間は、プログラムがループを通過するたびに方程式のシステムを解くことから来ていることがわかりました。だから、別のスクリプトを使って式を象徴的に解くことができたので、スクリプトは代数を行うだけです。それは今すぐもっと速く走っています。

関連する問題