MATLAB Function ブロックをフィードバックさせて演算をさせたい

조회 수: 4 (최근 30일)
Kimiyasu Sasaki
Kimiyasu Sasaki 2019년 9월 19일
댓글: Shoumei 2019년 9월 20일
SimulinkのMATALB Functionブロックを使って以下のようなことをしたいです。
入力:u = a (From Workspaceから読み込み)
出力:y = a + y[t-1]
もちろん、Delayブロックを用いれば簡単にできますが、MATLAB functionブロックを用いてコードを書くにはどのようにしたらよいでしょうか?
for文を使うのはわかるのですが、どのように書いたらいいのかわかりません。
初心者で稚拙な質問で大変申し訳ございません。
ご回答よろしくお願いいたします。

채택된 답변

Shoumei
Shoumei 2019년 9월 20일
MATLAB Functionブロックで前のサンプルのデータを使用したい場合はpersistent変数を使用します。persistent変数は、初期値を与える必要があるので、if isempty()で初期化を行います。
このように書くことができます。
function y = fcn(a)
persistent y_temp % 状態を持った変数
if isempty(y_temp)
y_temp = 0; % 初期化
end
y_temp = a + y_temp; % 前のサンプルのy_tempとaを加算して、y_tempに代入
y = y_temp;
このサンプルでは、Simulinkモデルは下図のように作成しています。
mlf.png
  댓글 수: 1
Shoumei
Shoumei 2019년 9월 20일
MATLAB Functionブロックの入力を、MATLABワークスペースから読み込みたいときは、プログラムのエディタ画面にある[データの管理] > 変数のスコープを[パラメータ]に設定します。

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Kimiyasu Sasaki
Kimiyasu Sasaki 2019년 9월 20일
ご回答ありがとうございました。 大変申し訳ございません。出力であるyの式が誤ってました。 y = a + y[t - 1] + y[t - 2] でした。 Delayブロックのz^(-2)を使えば簡単にできますが、MATLAB Functionブロックで書く方法がわかりません。 MATLAB Function用いたい理由はOptimizations toolboxの関数fminconを使用したいためです。
誠に申し訳ございませんが、ご教授お願いいたします。
  댓글 수: 1
Shoumei
Shoumei 2019년 9월 20일
persistent変数を2つ使ってください。

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Simulink Function에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!