Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

MATLAB function printing extra matrix?

  1. Dec 20, 2011 #1
    I'm a newbie to all things programming, and have to write a program implementing the Euler method to approximate an ODE.

    Anyways, the program works but when I use the function I wrote I get an extra matrix of zeroes above the desired output, which I don't understand as I have suppressed the output of the zero matrix with a semi-colon - the matrix is Eulerpoints. Here's the source code:


    function [Eulerpoints] = Eulermethod(x0,y0,xn,steps)
    %EULERMETHOD - this function will approximate y by the Euler method.
    % EULERMETHOD(x0,y0,xn,steps) will return a list of points that
    % approximate y in the interval [x0,xn] given our initial co-ordinate
    % (x0,y0) and the number of steps.

    Eulerpoints=zeros(steps+1,2);
    start = 2;
    finish = steps+1;
    h=(xn-x0)/steps;
    Eulerpoints(1,1) = x0, Eulerpoints(1,2) = y0;
    fprintf(' n xn Yn\n 0 %2g %2g\n',x0,y0)

    for I= start:finish
    Eulerpoints(I,1) = x0 +h*(I-1);
    Eulerpoints(I,2) = Eulerpoints(I-1,2) + h*(-2*Eulerpoints(I-1,2) - 0.25*Eulerpoints(I-1,1)*Eulerpoints(I-1,1) + 0.125); %% This line contains the ODE, which can be adjusted for a different equation.
    fprintf('%3g %4g %6g\n',I-1,Eulerpoints(I,1),Eulerpoints(I,2))
    end
    %
    end
     
  2. jcsd
  3. Dec 23, 2011 #2
    The x0 in Line 11 needs to have a semi-colon after it. This will then return the Eulerpoints matrix as a variable and the [n xn yn] print out that you call for, but you will no longer have the output you were concerned with.

    Here is the fixed code (using the CODE wrap that we have here on PF):

    Code (Text):

    function [Eulerpoints] = Eulermethod(x0,y0,xn,steps)
    %EULERMETHOD - this function will approximate y by the Euler method.
    % EULERMETHOD(x0,y0,xn,steps) will return a list of points that
    % approximate y in the interval [x0,xn] given our initial co-ordinate
    % (x0,y0) and the number of steps.

    Eulerpoints=zeros(steps+1,2);
    start = 2;
    finish = steps+1;
    h=(xn-x0)/steps;
    Eulerpoints(1,1) = x0; Eulerpoints(1,2) = y0;
    fprintf(' n xn Yn\n 0 %2g %2g\n',x0,y0)

    for I= start:finish
    Eulerpoints(I,1) = x0 +h*(I-1);
    Eulerpoints(I,2) = Eulerpoints(I-1,2) + h*(-2*Eulerpoints(I-1,2) - 0.25*Eulerpoints(I-1,1)*Eulerpoints(I-1,1) + 0.125); %% This line contains the ODE, which can be adjusted for a different equation.
    fprintf('%3g %4g %6g\n',I-1,Eulerpoints(I,1),Eulerpoints(I,2))
    end
    %
    end
     
    Hope this helps.

    Ben
     
  4. Dec 23, 2011 #3
    Ah thanks, yeh that's been bugging me (geddit?) for ages.
    Cheers
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook