My timeSpan is considered a nonscalar operator when using if statement. Help.

2 Ansichten (letzte 30 Tage)
Hello,
I am having trouble with my code. I tried experimenting with other statements other than if but I can't seem how to make my code work. I want the values to change after 15 seconds in the scenario. I am still a novice to Matlab.
%Differential Equation Parachute
%Terminal Velocity Differential Equation
m = 80;
S = 0.65;
Cd = 0.45;
rho = 1.225;
v0 = 0;
g = 9.8;
timeSpan = [0 50];
if timeSpan > 15
Cd = 1.75;
S = 11.6127;
end
[Time,Vout] = ode45(@(t,v)(g-(rho/(2*m))*v^2*S*Cd),timeSpan,v0);
f2 = figure;
plot(Time,Vout);
title('Free Fall Terminal Velocity')
xlabel('Time (s)')
ylabel('Velocity v(t)')

Akzeptierte Antwort

Cris LaPierre
Cris LaPierre am 3 Mai 2021
Bearbeitet: Cris LaPierre am 3 Mai 2021
Your if statement is not doing what you think it is doing. To learn more about how an if statement works, I suggest going through Ch 13 of MATLAB Onramp.
To do what you want, you are going to have to create a function for your odefun and place the if statement inside the function. Ode45 solves the equation one time step at a time. You can use this example as a starting point.
Your final code might look something like this.
v0 = 0;
timeSpan = [0 50];
[Time,Vout] = ode45(@odefun,timeSpan,v0);
plot(Time,Vout);
title('Free Fall Terminal Velocity')
xlabel('Time (s)')
ylabel('Velocity v(t)')
function [dvdt] = odefun(t,v)
m = 80;
rho = 1.225;
g = 9.8;
if t > 15
Cd = 1.75;
S = 11.6127;
else
S = 0.65;
Cd = 0.45;
end
dvdt = (g-(rho/(2*m))*v^2*S*Cd);
end
  1 Kommentar
Marcos Dominguez
Marcos Dominguez am 3 Mai 2021
Thank you very much!
The explanation of how ode works and showing me that the if statement has to be in a function statement made things a little clearer. I will definatly check out the resource you gave me to understand if statements better.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Produkte


Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by