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

조회 수: 37 (최근 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 CenterFile Exchange에서 Simulink Function에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!