2016-08-23 79 views
0

Simulinkに2つの入力を受け取り、出力を生成するMatlab関数ブロックを持っています。シミュレーションの経過中、いくつかの時点で、入力の1つがゼロになります。私はその特定の入力値がゼロであるときはいつでも、関数に最も最近の非ゼロ入力を使用したいと思います。どうすればこれを達成できますか?最近の非ゼロの入力値を更新する永続変数を作成しようとしましたが、それはうまくいかないようです。SimulinkのMatlab関数 - 以前の非ゼロの入力値を保持

EDIT 1(コードを含める):

function y = fcn(u) 

persistent ref_val 

if isEmpty(ref_val) 
    ref_val=10.0 
end 

if(u(1)<=25) 
    y=20.0 
else 
    if(u(2)>0) 
     y=u(2) 
     ref_val=u(2) 
    else 
     y=ref_val 
    end 
end 

EDIT 2:今のところ、私は最近の非ゼロの入力値を保持するために静的変数を使用してCコードを書くことにより、問題を修正。しかし、私はMatlab関数で直接これを実現するための提案/解決策を歓迎しています。

+0

この入力を使用して、関数は、永続変数はこれを行う方法です。あなたのコードを私たちに教えてください。 –

+0

フィル、申し訳ありませんがコードを含める必要があります。編集をご覧ください。 – arun

+1

コードが正しいようですか?例外として、 "isEmpty"は "isempty"でなければならないと思います。なぜなら、MATLABは組み込み関数に対して大文字と小文字を区別するからです。 – DMR

答えて

-1

シミュレーションでこれを使用できませんか?

//入力での最後の非ゼロ値

[〜、last_non_zero] = MAX((入力(1見つけた:i)> 0))のインデックス検索

//コール

出力= FNC(入力(last_non_zero))

+0

質問はMATLABではなくSimulinkについてです。入力はベクトルではないので、履歴値は(デフォルトでは)使用可能ではありません。 –

関連する問題