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

Another Matlab problem

  1. Dec 5, 2004 #1
    I am having trouble with some Matlab code that I am writing. I am attempting to solve ODE writing my own code, per the Professor. That means I cannot use ODE45 or other built-in functions.

    My problem: Oiler, a play on Euler, calls another function, FX, that contains the two equations that I am attempting to solve. Oiler is called from the command line by the operator (me).

    Command line:

    [X,Y] = oiler('bloodtest',2,3,3,4)

    Function # 1:

    function [rhs] = oiler(FX,a,b,n,h)
    for i=2:n;

    Function # 2:

    function [dx,dy] = bloodtest(x,y)

    I get error flags saying 'too many outputs' for function #2, but I have not yet found a way to call the second function using a vector as the argument.

    Any help will be appreciated

    Last edited: Dec 5, 2004
  2. jcsd
  3. Dec 5, 2004 #2


    User Avatar
    Science Advisor
    Gold Member

    Hi Bill, I discovered what is reddened in the quoted text. Change the ";" in the second term by ",". Maybe that is giving you some trouble.
  4. Dec 5, 2004 #3
    I think the problem is here:


    in the first line you make the variable rhs a matrix with two rows and 3 columns, namely:
    but in the next line you say: assign the result of feval(FX,r) to "all rows of the first column" of rhs. But that is a matrix with two rows and one column, while FX (bloodtest) will return a matrix with one row and two columns.

    I think you should change FX (bloodtest) to:

    Function # 2:

    function [dx; dy] = bloodtest(x,y)
    [dx; dy]=[x.^2;2.*y];
  5. Dec 5, 2004 #4
    Got past the first problem, but I am stuck on another problem. The indices don't seem to be working like I think they should.

    The equations of interest from the homework assigned:
    dy/dx = -2y+5*exp(-x) % (y1)
    dz/dx = (-y*z^2)/2 % (y2)

    I am incrementing by 0.2. They are coupled, so vector algebra comes into play. Now, on to the code that I am writing.

    Command line:

    EDU>> e=oiler('P25_11',0,2,4,5,.2)

    Function # 1 %%%%%%%%%%%%%%%%%%%%%%%%%

    function [rhs] = oiler(FX,xo,y1,y2,n,h)

    % rhs(:,1)=feval(FX,x,rhs(1,1),r(2,1));
    % rhs(:,1)=feval(FX,xo,yo,zo);
    for k=2:n;

    Function # 2 %%%%%%%%%%%%%%%%%%%%%%%


    and the response is:

    e =

    2.0000 2.0187 1.8816 1.6777 1.4560
    4.0000 0.8000 0.6708 0.5861 0.5285

    Maybe the response is correct for what I am trying to do, but computing by hand, the first term on the bottom line should be -16. That means the entire bottom row is wrong.

    Thanks again

  6. Dec 5, 2004 #5
    Maybe my understanding of differential equations with boundaries is suspect. The code does run, the incrementation is taking place like it should. I did compute the second term and it is correct. The third term is correct, and the fourth, and the fifth.

    I have egg on my face.

Share this great discussion with others via Reddit, Google+, Twitter, or Facebook