質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Q&A

解決済

1回答

1874閲覧

classdefの使いかた

tazaryu

総合スコア6

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

0グッド

0クリップ

投稿2021/08/02 09:54

編集2021/08/02 10:06

matlabのclassdefを用いて,関数をクラス内で定義したいのですが,変数が割り当てらてないなどのエラーが生じます.どなたか,正しい書き方をご教示の程,お願い致します.

classdef plactice properties(Constant) % 各固定値を保有,Staticで変更 L = 1; % 長さ m = 1; % 質量 g = 9.8; % 重力加速度 Tspan = linspace(0,2,20); % 積分する時間 状態数20×20 theta_ic = [0;0]; % 初期の角度と角速度 b = 0.01 % 摩擦係数 u = randi([10 25],1,1); ball_target = 2.5; end methods(Static) function [dtheta_dt] = ode_function(t, theta) % ローカル変数を定義して式を作成 g = plactice.g; L = plactice.L; u = plactice.u; b = plactice.b; theta1 = theta(1); theta2 = theta(2); dtheta1_dt = theta2; dtheta2_dt =-(g/L)*(theta1)-b*(theta2)-u; dtheta_dt = [dtheta1_dt; dtheta2_dt]; end function ball_gosa = ball_function(u)    % この関数定義の仕方が間違っているみたいです.w,theta,ball_x,ball_yなどが正しく割り当てらてないです. ball_target = plactice.ball_target; [t, theta] = ode45(@(t,theta) plactice.ode_function(t,theta),plactice.Tspan,plactice.theta_ic); w = theta(:,2); theta = theta(:,1); ball_x = L*sin(theta(:,1)); ball_y = -L*cos(theta(:,1)); ball_time = sqrt(2*abs(ball_y)/9.8); ball_reach = ball_x +abs(w)*ball_time; ball_gosa = ball_reach-ball_target; end end end

クラス内の値の呼び出しができないです.thetaはできるのですが,ほかの変数の値が出力されないです.
例えば,

>> ball_x 関数または変数 'ball_x' が認識されません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki23

2021/08/02 10:00

エラーメッセージは省略せず質問文に記載してください。
guest

回答1

0

ベストアンサー

ball_xball_yはローカル変数なので、関数を抜けたら無効です。こういう場合は、複数の値を返すのがよくつかわれる方法です。

MATLAB

1function [ball_gosa, ball_x, ball_y] = ball_function(u) 2ball_x = %省略 3ball_y = %省略 4%省略 5ball_gosa = %省略 6end

使う方は

MATLAB

1>> [gosa, x, y] = plactice.ball_function(0)

投稿2021/08/02 13:33

Bearded-Ockham

総合スコア430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tazaryu

2021/08/06 09:34

丁寧に回答していただきましたこと,感謝致します.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問