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

Learn moreOpportunities for recent engineering grads.

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

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])

Answer by Walter Roberson on 27 Mar 2011

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

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.

## 0 Comments