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

15 views (last 30 days)
irosy
irosy on 17 Dec 2022
Commented: irosy on 18 Dec 2022
こんにちは.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
複数の入力値の受け渡しが問題なのかなと思いますが,あまりにも時間が溶けていくのでご有識者の方々の力をおかりしたいです.おねがいします!

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 17 Dec 2022
関数側の引数を変更しない場合は関数の呼出側で引数を分けて渡す必要があります。
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 Comments
Atsushi Ueno
Atsushi Ueno on 17 Dec 2022
>そこは、構造体配列を使えば良いでしょう
構造体配列はこんな感じです。ですが、どんな型を使うのもプログラマの自由です。
% 相対距離,方位角の算出に必要な[半径,初期位置ベクトル]
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 on 18 Dec 2022
ご丁寧にありがとうございます!こういうやり方もあるのですね.とても参考になりました!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!