MATLAB Answers

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

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

  0 Comments

Sign in to comment.

Accepted Answer

Shoumei
Shoumei on 20 Sep 2019
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 Comment

Shoumei
Shoumei on 20 Sep 2019
MATLAB Functionブロックの入力を、MATLABワークスペースから読み込みたいときは、プログラムのエディタ画面にある[データの管理] > 変数のスコープを[パラメータ]に設定します。

Sign in to comment.

More Answers (1)

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

  1 Comment

Shoumei
Shoumei on 20 Sep 2019
persistent変数を2つ使ってください。

Sign in to comment.

Sign in to answer this question.

Products