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

こんにちは.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

0 votes

関数側の引数を変更しない場合は関数の呼出側で引数を分けて渡す必要があります。
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

irosy
irosy on 17 Dec 2022
ありがとうございます!ひとまずこれで動きました!
関数側の引数が7つあるのにも関わらず,コードのほうではxが1つとしてカウントされてるってことですしょうか?
甘い考えですが,xが多変数を一気に7つ分代入してくれると思っていました.
Atsushi Ueno
Atsushi Ueno on 17 Dec 2022
q1 = [0 0.5 0.5*pi]; %[x,y,theta]
q2 = [-0.4 0.8 0];
x = [0.10, q1, q2]; %相対距離,方位角の算出に必要な[半径,初期位置ベクトル]
relative_parameters(x)
x に渡したい値が全て入っているので、x を渡せば全ての必要な値を渡す事が可能です。
function [l_ik, phi_ik] = relative_parameters(x)
でもこれではちょっと分かり難いですね。そこは、構造体配列を使えば良いでしょう。
>そこは、構造体配列を使えば良いでしょう
構造体配列はこんな感じです。ですが、どんな型を使うのもプログラマの自由です。
% 相対距離,方位角の算出に必要な[半径,初期位置ベクトル]
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)

Categories

Find more on 環境と設定 in Help Center and File Exchange

Asked:

on 17 Dec 2022

Commented:

on 18 Dec 2022

Community Treasure Hunt

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

Start Hunting!