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

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

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (1)

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

Iniciar sesión para comentar.

Categorías

Más información sobre イベント関数 en Help Center y File Exchange.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!