# Need help fixing my ODE45 script

1 view (last 30 days)
Stevon Kline on 1 Nov 2019
Commented: Stevon Kline on 2 Nov 2019
My teacher tried helping me build this code for a falling object with resistance. (We did it on paper since we didn't have a computer near at the time.) Given only the acceleration a = g+kv2. With y(0) = 1000, and v(0) = 0. Need to find the time, and velocity when object hits the ground.
I'm getting empty sets as my outputs....suggestions?
h = 1000;
t0 = 0; tfinal = 15;
tspan = [t0,tfinal];
options = odeset('Events',@landing);
[t,y,te,ye,ie] = ode45(@drag,tspan,[h;0],options);
function dydt = drag(t,y)
k = 1/10;
g = 9.8;
dydt = [-y(2); g + k*-(y(2)).^2];
end
function [check,stop,direction]=landing(t,y)
check = y(1);
stop = 1;
direction=0;
end

#### 1 Comment

darova on 1 Nov 2019
Works ok for me

T.Tomita on 1 Nov 2019
Since you want to detect when the position becomes zero, the correct description is as follows.
check = y(1);

Stevon Kline on 1 Nov 2019
Thanks, I changed that. But I'm still getting empty sets on my output. Suggestions?
T.Tomita on 1 Nov 2019
Change the value of tfinal to about 150 seconds (it takes about 100 seconds to hit the ground) and check the value of te and ye (2) when the calculation is complete .These are the time and velocity when the object hits the ground respectively.
Stevon Kline on 2 Nov 2019
Thank you.