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

44 views (last 30 days)
s
s on 6 Dec 2019
Commented: s on 9 Dec 2019
MATLAB functionブロックを使用する際に、先にワークスペースで定義している変数を使いたいのですが方法はないでしょうか。
また、MATLAB functionに書き込むプログラムは.mファイルで作成したプログラムをそのまま使うことはできないのでしょうか。
以上2点お願いいたします。

Accepted Answer

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

More Answers (1)

s
s on 8 Dec 2019
Edited: s on 8 Dec 2019
アドバイスをいただいた通り、プログラムに必要なワークスペース内にある変数を取り込むことができました!
.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 Comments
Musashi Ito
Musashi Ito on 8 Dec 2019
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 on 9 Dec 2019
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;

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!