Vector ODE using forward Euler method
24 views (last 30 days)
Show older comments
Having trouble defining the following vector ode in matlab.
I have written the following for the right hand side function for suitable use in ode45. The system models a projectile with position and velocity vectors (x(t), y(t)) and (u(t), v(t)) at time t with parameters g and mu for gravity and air resistance.
function dydt = rhs_1(t, y, g, mu)
dxdt1 = u;
dydt2 = v;
dudt3 = -mu.*y(1).*sqrt(y(1).^2+y(2).^2);
dvdt4 = -g-mu.*y(2).*sqrt(y(1).^2+y(2).^2);
dydt = [dxdt1, dydt2, dudt3, dvdt4];
end
And when I run the following;
[t,y,g,mu]=ode45(@rhs_1,[0 100],[0.1; 0], 9.8, 0.5);
plot(t,y,g,mu(:,1),'r.-',t,y(:,2),'g.-','LineWidth',2,'MarkerSize',10);
I get the following error messages;
Unrecognized function or variable 'u'.
Error in rhs_1 (line 2)
dxdt1 = u;
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
Error in runode (line 1)
[t,y,g,mu]=ode45(@rhs_1,[0 100],[0.1; 0], 9.8, 0.5);
Apologies if this is trivial, I am new to Matlab. Any help is greatly appreciated. Thank you!
0 Comments
Answers (2)
Jan
on 10 Jan 2021
Edited: Jan
on 10 Jan 2021
You have replaced the "x" of the formula by "y(1)", the "y" by "y(2)". Now you have to replace "u" by "y(3)" also and "v" by "y(4)":
function dydt = rhs_1(t, y, g, mu)
dxdt1 = y(3); % instead of u
dydt2 = y(4); % instead of v
dudt3 = -mu .* y(3) .* sqrt(y(3).^2 + y(4).^2); % y(1) -> y(3), y(2) -> y(4)
dvdt4 = -g - mu .* y(4) .* sqrt(y(3).^2 + y(4).^2);
dydt = [dxdt1, dydt2, dudt3, dvdt4];
end
0 Comments
James Tursa
on 10 Jan 2021
Also your main code should look something like this:
g = 9.8;
mu = 0.5;
[t,y]=ode45(@(t,y)rhs_1(t,y,g,mu),[0 100],[0.1; 0]);
Then, depending on how you want your plotting, something like this:
plot(y(:,1),y(:,2));
or
plot(t,y(:,1),t,y(:,2));
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!