Borrar filtros
Borrar filtros

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.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!