自作関数の入力引数不足エラーについて

13 ビュー (過去 30 日間)
irosy
irosy 2022 年 12 月 17 日
コメント済み: irosy 2022 年 12 月 18 日
こんにちは.MATLAB初心者です.
あるモデルの相対距離,相対角度を入力値に対して求める関数を作ろうとしているのですが,どうも入力引数エラーが発生してしまい前に進めません.
コードはこちらです.
q1 = [0 0.5 0.5*pi]; %[x,y,theta]
q2 = [-0.4 0.8 0];
x = [0.10, q1, q2 ] %相対距離,方位角の算出に必要な[半径,初期位置ベクトル]
以下,自作関数です
function [l_ik, phi_ik] = relative_parameters(r,x_i,y_i,theta_i,x_k,y_k,theta_k)
%カッコ内は受け取るデータr,x_i,y_i,theta_i,x_k,y_k,theta_kの7つ
bar_y_k = bar_y(r,x_i,y_i,theta_i,x_k,y_k,theta_k)
bar_x_k = bar_x(r,x_i,y_i,theta_i,x_k,y_k,theta_k)
xi_ik = atan((y_i - y_k - r*sin(theta_k))/(x_i - x_k -r*cos(theta_k)));
l_ik = sqrt((x_i - bar_x_k)^2 + (y_i - bar_y_k)^2);
phi_ik = pi + xi_ik - theta_i;
end
複数の入力値の受け渡しが問題なのかなと思いますが,あまりにも時間が溶けていくのでご有識者の方々の力をおかりしたいです.おねがいします!

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 12 月 17 日
関数側の引数を変更しない場合は関数の呼出側で引数を分けて渡す必要があります。
q1 = [0 0.5 0.5*pi]; %[x,y,theta]
q2 = [-0.4 0.8 0];
relative_parameters(0.10,q1(1),q1(2),q1(3),q2(1),q2(2),q2(3))
  4 件のコメント
Atsushi Ueno
Atsushi Ueno 2022 年 12 月 17 日
>そこは、構造体配列を使えば良いでしょう
構造体配列はこんな感じです。ですが、どんな型を使うのもプログラマの自由です。
% 相対距離,方位角の算出に必要な[半径,初期位置ベクトル]
x.q1.x = 0.0; x.q1.y = 0.5; x.q1.theta = 0.5*pi;
x.q2.x = -0.4; x.q2.y = 0.8; x.q2.theta = 0; x.r = 0.10;
x
x = struct with fields:
q1: [1×1 struct] q2: [1×1 struct] r: 0.1000
x.q1
ans = struct with fields:
x: 0 y: 0.5000 theta: 1.5708
[l_ik, phi_ik] = relative_parameters(x)
Unrecognized function or variable 'bar_y'.

Error in solution>relative_parameters (line 8)
bar_y_k = bar_y(x)
function [l_ik, phi_ik] = relative_parameters(x)
bar_y_k = bar_y(x)
bar_x_k = bar_x(x)
xi_ik = atan((x.q1.y - x.q2.y - x.r*sin(x.q2.theta)) ...
/(x.q1.x - x.q2.x - x.r*cos(x.q2.theta)));
l_ik = sqrt((x.q1.x - bar_x_k)^2 + (x.q1.y - bar_y_k)^2);
phi_ik = pi + xi_ik - x.q1.theta;
end
irosy
irosy 2022 年 12 月 18 日
ご丁寧にありがとうございます!こういうやり方もあるのですね.とても参考になりました!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File Exchange線形計画法と混合整数線形計画法 についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!