Make Function Equal Zero After Certain Time

Hi all, I am in need of some help. I am trying to use if and else statements to plot the following function. Here is my current code:
HP = 60/72;
Tas = 0.105;
Elamin = 0.12;
Elamax = 0.28;
Eramin = 0.05;
Eramax = 0.15;
t = [0:0.001:HP];
if t > Tas
aa = 0;
else
aa = sin((pi*t)/Tas);
end
ela = Elamin + (Elamax - Elamin)*aa;
era = Eramin + (Eramax - Eramin)*aa;
plot(t,ela, t,era, t,aa);
Basically, I am trying to say that for 0<t<Tas, the function aa is calculated. Otherwise, the function aa = 0. Attached is the current plot I am getting if I do not include the if/else statements. Its kind of what I want, except the graph must level to around y = 0 after x = Tas (about 0.105s).
Any help is appreciated!

 Respuesta aceptada

Star Strider
Star Strider el 4 de Abr. de 2018
Try this:
aa = @(t, Tas) sin((pi*t)/Tas) .* ((0 <= t) & (t <= Tas)); % Function, With Conditions As A Logcal Index Vector
t = linspace(-1, 1, 150); % Time Vector
Tas = 0.105;
figure
plot(t, aa(t, Tas))
grid

6 comentarios

s.v.
s.v. el 4 de Abr. de 2018
That is more of what I am looking for, but writing aa in that form doesn't allow me to plot ela or era anymore. I get the error:
"Undefined operator '*' for input arguments of type 'function_handle'."
What else must I change?
Thanks!
I forgot to include ‘ela’ and ‘era’.
Try this:
aa_fcn = @(t, Tas) sin((pi*t)/Tas) .* ((0 <= t) & (t <= Tas)); % Function, With Conditions As A Logcal Index Vector
HP = 60/72;
t = linspace(-1, HP, 150); % Time Vector
Tas = 0.105;
aa = aa_fcn(t, Tas);
Elamin = 0.12;
Elamax = 0.28;
Eramin = 0.05;
Eramax = 0.15;
ela = Elamin + (Elamax - Elamin)*aa;
era = Eramin + (Eramax - Eramin)*aa;
figure
plot(t,ela, t,era, t,aa);
grid
legend('ela', 'era', 'aa')
s.v.
s.v. el 4 de Abr. de 2018
That worked. If you'd like to help further -- I'd like to have the same waveform shown in the attached figure happen over 6 seconds. So basically, the attached figure multiple times on 1 graph (graph starts every 0.8 sec).
An image would be easier to work with than a .fig file that requires us to download it and then view it before again deleting the file. It’s been a long day and I choose not to do that.
Try this:
aa_fcn = @(t, Tas) sin((pi*t)/Tas) .* ((0 <= t) & (t <= Tas)); % Function, With Conditions As A Logcal Index Vector
HP = 60/72;
t = linspace(-1, HP, 150); % Time Vector
Tas = 0.105;
aa = aa_fcn(t, Tas);
Elamin = 0.12;
Elamax = 0.28;
Eramin = 0.05;
Eramax = 0.15;
ela = Elamin + (Elamax - Elamin)*aa;
era = Eramin + (Eramax - Eramin)*aa;
figure
plot(t,ela, t,era, t,aa);
grid
legend('ela', 'era', 'aa')
N = 7; % Number Of Repititions
t_ext = linspace(0, HP*N, numel(t)*N); % Extend ‘t’ For ‘N’ Repititions
ela_ext = repmat(ela, 1, N); % Extend ‘ela’ For ‘N’ Repititions
era_ext = repmat(era, 1, N); % Extend ‘era’ For ‘N’ Repititions
aa_ext = repmat(aa, 1, N); % Extend ‘aa’ For ‘N’ Repititions
figure
plot(t_ext,ela_ext, t_ext,era_ext, t_ext,aa_ext);
grid
legend('ela', 'era', 'aa')
The ‘N’ variable will scale the previously-defined vectors to produce the desired number of repetitions.
Experiment to get the result you want.
s.v.
s.v. el 4 de Abr. de 2018
Thank you.
Star Strider
Star Strider el 4 de Abr. de 2018
As always, my pleasure.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Line Plots en Centro de ayuda y File Exchange.

Preguntada:

el 4 de Abr. de 2018

Comentada:

el 4 de Abr. de 2018

Community Treasure Hunt

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

Start Hunting!

Translated by