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

13 vues (au cours des 30 derniers jours)
irosy
irosy le 17 Déc 2022
Commenté : irosy le 18 Déc 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
複数の入力値の受け渡しが問題なのかなと思いますが,あまりにも時間が溶けていくのでご有識者の方々の力をおかりしたいです.おねがいします!

Réponse acceptée

Atsushi Ueno
Atsushi Ueno le 17 Déc 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 commentaires
Atsushi Ueno
Atsushi Ueno le 17 Déc 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 le 18 Déc 2022
ご丁寧にありがとうございます!こういうやり方もあるのですね.とても参考になりました!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur 線形計画法と混合整数線形計画法 dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!