Reducing 2nd order ODE into coupled ODE. Solve using Euler Method and graph.

Hello, I'm trying to get a numerical solution for the given problem but I can't find a way to get it to work.
t0 = 0;
t = 5;
h = 0.1;
N = (t-t0)/h;
T = [t0:h:t;]';
Y = zeros(size(t));
Y(1) = 3;
%Start of Euler Method
syms y(t)
E = diff(y,2) + .1*diff(y) + .3*y == .02*y^3;
V = odeToVectorField(E)
for i = 1: N
P = (V(2))
Y(i+1) = Y(i) + h*P(i)
S = Y(i+1)
end
plot(T,Y,'o')
the error I'm getting is the following:
The following error occurred converting from sym to double:
Unable to convert expression into double array.
Error in Euler (line 19)
Y(i+1) = Y(i) + h*P(i)

답변 (1개)

tspan = [0 5]; % time span to integrate
y0 = [3 0]; % initial conditions
%Start of Euler Method
syms y(t)
E = diff(y,2) + .1*diff(y) + .3*y == .02*y^3;
V = odeToVectorField(E);
odefun = matlabFunction(V,'Vars',{'t','Y'});
[t,y] = ode45(odefun,tspan,y0);
plot(t,y,'o')

댓글 수: 3

Thank you, i do need the ODE 45. What about the Euler method? I still can't get it to work. Can you see what the problem is?
The result of odeToVectorField is a symbolic expression. This can not be used in the way you want it.
Ok, good to know. How can I make my ODE into an actual expression that I can use for Euler's? Thank you so much for helping me.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Mathematics에 대해 자세히 알아보기

태그

질문:

2019년 12월 9일

댓글:

2019년 12월 9일

Community Treasure Hunt

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

Start Hunting!

Translated by