Matlab ODE-Solver and Constant Params

  • Context: MATLAB 
  • Thread starter Thread starter S. Moger
  • Start date Start date
  • Tags Tags
    Constant Matlab
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
4 replies · 6K views
S. Moger
Messages
52
Reaction score
2
Hey,

Code:
function dy = pizzaode(t, y)
    a=2;
    b=0.5;
    d=4;
    u=y(1);
    v=y(2);
    dy = nan(2,1);
    dy(1) = u*(1-u) - a*u*v/(u+d);
    dy(2) = b*v*(1-v/u);
end

Code:
[t,y] = ode45(@pizzaode, [0 100], [u(1);v(1)]);

This works but it's crap.

Why?

Code:
    a=2;
    b=0.5;
    d=4;

- Ugly code.

I want to set the params outside the function.

So ok, I did this:

Code:
function [t,y] = pizzamaker(a, b, d, u0, v0)
    

[t,y] = ode45(@pizzaode, [0 100], [u0;v0]);

function dy = pizzaode(t, y)

    u=y(1);
    v=y(2);
    dy = nan(2,1);
    dy(1) = u*(1-u) - a*u*v/(u+d);
    dy(2) = b*v*(1-v/u);
end


end


And that's nice because it works. But how would I do this without this strange nesting?
 
Physics news on Phys.org
Of course function has its own workspace. Variables are local to the function.

I'm not sure whether this will work. Try insert the statement
global a b d

in your function pizzaode.

Then before you call the function ode45 you must have the following statements
global a b d
a=2; b=0.5; d=4;
 
I would ideally want to pass them through the function pointer (or what it is) in the ode45 function call. Global variables are no fun thing either.
 
Doing it globally is the best solution I could find for a similar problem.

Don't be obsessive this is MATLAB - not C++, if it does your job, why bother?
 
sokrates said:
Doing it globally is the best solution I could find for a similar problem.

Don't be obsessive this is MATLAB - not C++, if it does your job, why bother?

:) Indeed...