MATLAB functionブロ​ックを使用する際にワ​ークスペースに定義さ​れている値を使用した​い

39 ビュー (過去 30 日間)
s
s 2019 年 12 月 6 日
コメント済み: s 2019 年 12 月 9 日
MATLAB functionブロックを使用する際に、先にワークスペースで定義している変数を使いたいのですが方法はないでしょうか。
また、MATLAB functionに書き込むプログラムは.mファイルで作成したプログラムをそのまま使うことはできないのでしょうか。
以上2点お願いいたします。

採用された回答

Musashi Ito
Musashi Ito 2019 年 12 月 7 日
MATLAB Function ブロックでワークスペースの変数を使用する場合は、MATLAB Function ブロックのエディタにある[データの編集] から指定の変数を [パラメータ] として追加すると使えそうですがいかがでしょうか。
mfb_ws.png
ドキュメンテーションにも記載してあるみたいです。
また.m ファイルをそのまま使用する場合は、全部コピーして貼り付けするか、.m ファイルを関数化して、MALTAB Function ブロック内で関数として呼び出す方法はいかがでしょうか。

その他の回答 (1 件)

s
s 2019 年 12 月 8 日
編集済み: s 2019 年 12 月 8 日
アドバイスをいただいた通り、プログラムに必要なワークスペース内にある変数を取り込むことができました!
.mファイルのプログラムをコピー&ペーストしましたが「関数または変数 'yd1' が未定義です。ローカル変数への 1 番目の代入は、そのクラスを特定します。」 このようエラーが発生しています。私はプログラム初心者で内容がいまいち理解できておらず困っております。
また、最終的に出力したい変数が複数(4つ)ある場合はどうすればよいですか?
function y = fcn(u, g, ms, x2, T, d)
amx=g*ms;
xd = -50:0.5:0;
yy2 = 1:0.25:4;
ny2 =length(yy2);
for k=1:ny2
y2 = yy2(1,k);
for i=1:length(xd)
yd1(1,i) = -y2*xd(1,i)/(x2-xd(1,i))-d/2; %yd1がエラーにより以下がすべて計算できない
Td(1,i) = ((yd1(1,i))/100);
Vr(1,i) = amx * ((T^2+(-4*xd(1,i))/(2*amx))^0.5);
Tr(1,i) = (-xd(1,i)/Vr(1,i));
end
%{
~~~~プログラム途中省略~~~~~~
最終的には変数を複数出力したい
%}
end
y = u;
  2 件のコメント
Musashi Ito
Musashi Ito 2019 年 12 月 8 日
MATLAB Function ブロックの for 文の中で変数のサイズが変化するプログラムの場合は、for 文の前に変数のサイズを定義しておく必要がありそうです。yd1 のベクトルが for 文で計算される前に、事前にzeros などの関数でサイズを定義してみてはいかがでしょうか。
yd1 = zeros(1,length(xd));
同じようにTd, Vr, Tr も事前にサイズを定義する必要がありそうです。
MATLAB の関数で出力する変数が複数ある場合は、[ ] を使って記述するみたいです。
function [a,b,c,d] = fcn(u, g, ms, x2, T, d)
関数の書き方は下記のドキュメンテーションが参考になりそうです。
s
s 2019 年 12 月 9 日
yd1のforの前というのは★1の部分に変数を定義するということでしょうか。それとも、★2の部分でしょうか。どちらに変数の定義をしてもエラーが表示されなかったので・・・
function y = fcn(u, g, ms, x2, T, d)
amx=g*ms;
xd = -50:0.5:0;
yy2 = 1:0.25:4;
ny2 =length(yy2);
for k=1:ny2
y2 = yy2(1,k);
%%★1
%{
       y1=zeros(1,length(xd));
Td=zeros(1,length(xd));
Vr=zeros(1,length(xd));
Tr=zeros(1,length(xd));
%}
for i=1:length(xd)
%%★2
yd1(1,i) = -y2*xd(1,i)/(x2-xd(1,i))-d/2;
Td(1,i) = ((yd1(1,i))/100);
Vr(1,i) = amx * ((T^2+(-4*xd(1,i))/(2*amx))^0.5);
Tr(1,i) = (-xd(1,i)/Vr(1,i));
end
%{
~~~~プログラム途中省略~~~~~~
最終的には変数を複数出力したい
%}
end
y = u;

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

カテゴリ

Help Center および File ExchangeSimulink Function についてさらに検索

Community Treasure Hunt

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

Start Hunting!