eulers improved method code error
6 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Syed Haque
el 14 de Oct. de 2019
Comentada: Syed Haque
el 17 de Oct. de 2019
tried to solve ode using eulers improved method for a function of F=2xy
with step size h=0.1,y0=1,x0=1 and seeking y(1.5)
The code is as follows
function yout=improvedeuler3(F,x0,h,xfinal,y0);
y=y0;
yout=y;
for x=x0:h:xfinal-h;
s1=F(x,y);
s2=F(x+h/2,y+h*s1/2); %% is it correct for modified euler
y=y+h*s2;
yout=[yout,y];
end
end
initial conditions and conecting script is
F=@(x,y)2*x*y;
x0=1;
h=0.1;
xfinal=1.5;
y0=1;
yout=improvedeuler(F,x0,h,xfinal,y0);
%comparision with exact
x=x0:h:xfinal;
y_exact=exp((x.^2)-1);
plot(x,yout,'r',x,y_exact,'k'),legend('Improved','Exact');
I am getting a matlab output of y values different from that calculated manually
It seems there is an error in the code,unable to makeout.
1 1.2310 1.5452 1.9779 2.5814 3.4348 ------ matlaboutput
1 1.2320 1.5479 1.9832 2.5908 3.4509 ------ manual calculation
3 comentarios
Respuesta aceptada
James Tursa
el 15 de Oct. de 2019
Editada: James Tursa
el 15 de Oct. de 2019
s2=F(x+h/2,y+h*s1/2); %% is it correct for modified euler
If "Improved" Euler's Method means "Modified" Euler's Method as your comment indicates, then no it is not correct.
Modified Euler is basically finding the derivative at the current point, finding the derivative one full step ahead of the current point, and then using the average of the two derivatives to make your integration step. So this:
s1=F(x,y);
s2=F(x+h/2,y+h*s1/2); %% is it correct for modified euler
y=y+h*s2;
should look something like this instead (inserting spaces for reading clarity):
s1 = F(x , y ); % derivative at current point
s2 = F(x+h, y+h*s1); % derivative at one full step ahead (using predicted point from standard Euler Method)
y = y + h*(s1 + s2)/2; % integrate forward using the average of the two derivatives
Did you really mean to use the "Midpoint" Method? What is the actual assignment you were given?
2 comentarios
James Tursa
el 15 de Oct. de 2019
Can you post your current code and the assignment text? Many contributors here (myself included) are not willing to open active documents like Excel or Word etc.
Más respuestas (1)
Syed Haque
el 16 de Oct. de 2019
3 comentarios
James Tursa
el 16 de Oct. de 2019
Same for me. When I put this code in a file called improveuler.m
function yout=improveuler(F,x0,h,xfinal,y0);
y=y0;
yout=y;
for x=x0:h:xfinal-h;
s1=F(x,y);
s2=F(x+h,y+h*s1);
y=y+h*(s1+s2)/2;
yout=[yout,y];
end
end
and this code in a separate file called improveuler_test.m
F=@(x,y)2*x*y;
x0=1;
h=0.1;
xfinal=1.5;
y0=1;
yout=improveuler(F,x0,h,xfinal,y0);
%comparision with exact
x=x0:h:xfinal;
y_exact=exp((x.^2)-1);
plot(x,yout,'r',x,y_exact,'k'),legend('Improved','Exact');
and then type the following at the command line
improveuler_test
I get it to run without errors and produce what looks like a reasonable plot.
Ver también
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!