Persistent Variable in a Function

5 ビュー (過去 30 日間)
Josh Cheng
Josh Cheng 2015 年 3 月 19 日
編集済み: Guillaume 2015 年 3 月 20 日
Hi,
I'm having difficulty writing code for a persistent variable. The goal is to have a value either be 1 or 0, depending on velocity. If velocity goes under 5 m/s, the function "turns on", effectively adding the component of the equation it is attached to, for 10 seconds. After that 10 seconds, it should automatically be reset to zero to "turn off" that particular part of the equation. Here is the equation in the script:
F = @(v,t) -((b/mc)*v.^2)-(9.81)*sin(theta)+(Fg/mc)*abs(sin(freqg*t))-(Fb/mc)*abs(sin(freqb*t))+(Fr/mc)*Rect(v,t);
Rect(v,t) is the function containing the persistent variable, and here is what I have so far:
function [ j ] = Rect( v,t )
if Check(v)<5
for t=t:1:t+10
j=1;
end
else
j=0;
end
end
I'm having difficulty wrapping my head around how to code it to behave how I would like it to. Any help is appreciated, thank you!
  2 件のコメント
dpb
dpb 2015 年 3 月 19 日
What is Check intended to be? It's undefined in the function unless it's a GLOBAL (ugly!).
Josh Cheng
Josh Cheng 2015 年 3 月 19 日
it's intended to check the velocity, but if there's a better way I'm all up for it!

サインインしてコメントする。

採用された回答

Guillaume
Guillaume 2015 年 3 月 19 日
編集済み: Guillaume 2015 年 3 月 20 日
Most likely, you would be better off without that Rect subfunction and instead use a variable to track the state of that Rect inside the loop that calls F.
Failing that, the following Rect would work:
function state = Rect(v, t)
persistent triggertime;
if v < 5
%add t to the list of trigger times
triggertime = [triggertime t]; %#ok<AGROW>
end
state = any(t >= triggertime & t < triggertime + 10);
end
  1 件のコメント
Josh Cheng
Josh Cheng 2015 年 3 月 19 日
Thank you, that worked wonderfully!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSpectral Measurements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by