Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

To resolve issues starting MATLAB on Mac OS X 10.10 (Yosemite) visit: http://www.mathworks.com/matlabcentral/answers/159016

Euler's Method

Asked by John on 27 Mar 2011

Using the Euler method solve the following differential equation. At x = 0, y = 5.

y' + x/y = 0

Calculate the Numerical solution using step sizes of .5; .1; and .01

From my text book I have coded Euler's method

function [t,y] = eulode(dydt, tspan, y0, h)
%eulode: Euler ODE solver
%   [t,y] = eulode(dydt, tspan, y0, h, p1, p2,...)
%   `   uses EULER'S method to INTEGRATE an ODE
%       (uses the slope at the beginning of the stepsize to graph the
%       function.)
%Input:
%   dydt    = name of hte M-file that evaluates the ODE
%   tspan   = [ti,tf] where ti and tf = initial and final values of
%               independent variables
%   y0      = initial value of dependent variable
%   h       = step size
%   p1,p2   = additional parameter used by dydt
%Output:
%   t = vector of independent variable
%   y = vector of solution for dependent variable
if nargin<4, error('at least 4 input arguments required'), end
ti = tspan(1); tf = tspan(2);
if ~ (tf>ti), error('upper limit must be greater than lower limit'), end
t = (ti:h:tf)'; 
n = length(t);
%if necessary, add an additional value of t 
%so that range goes from t=ti to tf
if t(n)<tf
    t(n+1) = tf;
    n = n+1;
    t(n)=tf;
end
y = y0*ones(n,1); %preallocate y to improve efficiency
for i = 1:n-1 %implement Euler's Method
    y(i+1) = y(i) + dydt(t(i),y(i))*(t(i+1)-t(i));
end
plot(t,y)

I have made another m-file to run Eulode, what I am confused with is where do I input my different step sizes and where do I input x=0 and y=5. However since the analytical solution yields:

simplify(dsolve('Dy=-x/y','y(0)=5','x'))
    ans =
    (-x^2+25)^(1/2)

and when x=0 the value is 5 so I have coded my Euler's Method like the following and the final values are close to 5 so I think it is correct can someone just verify.

dydx=@(x,y) -(x/y);
[x1,y1]=eulode(dydx, [0 1],5,.5);
[x2,y2]=eulode(dydx,[0 1],5,.1);
[x3,y3]=eulode(dydx,[0 1],5,.01);
disp([x1,y1])
disp([x2,y2])
disp([x3,y3])

0 Comments

John

Products

1 Answer

Answer by Walter Roberson on 27 Mar 2011

Yup, you have provided the values in the correct positions according to the documentation for eulode.

2 Comments

John on 27 Mar 2011

I think it is correct too, but should the eulode not become more accurate with a smaller step size? (with this configuration .01 has a larger error than .1 and .5)

Matt Tearle on 28 Mar 2011

How are you determining the error? If you're using the calculation you used here http://www.mathworks.com/matlabcentral/answers/4165-plotting-error then that's an incorrect calculation. So your use of the code here is fine, and Euler's method is indeed more accurate with a smaller stepsize.

Walter Roberson

Contact us