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

3 ビュー (過去 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 Center および File Exchange信号入力と信号出力 についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!