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

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

Akzeptierte Antwort

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

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

Melden Sie sich an, um zu kommentieren.

Produkte

Community Treasure Hunt

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

Start Hunting!