MATLAB Functioを使用して 配列に動的な値を代入する方法

Function y=fcn(u,i)
y=zeros(1,1000);
y(1,i)=u;
end
※ i はsimulinkから代入しており、i=1からインクリメントしています。
この場合、yの配列を確認したらすべての要素に0が代入されています。
やりたいこととしては、y(1,i)の要素にuを代入したいです。
uはFrom spreadsheetからの時系列データです。

Answers (1)

Toshinobu Shintai
Toshinobu Shintai on 10 Nov 2022
変数yが MATLAB Function ブロックを呼び出す度にzeros(1,1000)に書き換えられているために、過去のタイムステップに格納した情報を保持できていません。"persistent"を使って静的な変数を定義する必要があります。
例えば以下のように記述します。
function y = fcn(u,i)
persistent vec;
if isempty(vec)
vec = zeros(1, 1000);
end
vec(1,i) = u;
y = vec;
end
静的変数を初期化するために、「if isempty」の所はほぼ必ず必要になります。
実行すると以下のようになります。
本モデルは添付しました。

1 Comment

圭祐
圭祐 on 10 Nov 2022
ご丁寧な説明ありがとうがございました。解決することができました。

Sign in to comment.

Products

Release

R2016b

Asked:

on 10 Nov 2022

Commented:

on 10 Nov 2022

Community Treasure Hunt

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

Start Hunting!