Matlab ODE-Solver and Constant Params

  • MATLAB
  • Thread starter S. Moger
  • Start date
  • #1
53
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?
 

Answers and Replies

  • #2
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;
 
  • #3
53
2
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.
 
  • #4
483
2
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?
 
  • #5
341
0
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...
 

Related Threads on Matlab ODE-Solver and Constant Params

  • Last Post
Replies
2
Views
8K
  • Last Post
Replies
1
Views
3K
Replies
0
Views
3K
Replies
1
Views
2K
Replies
3
Views
7K
  • Last Post
Replies
2
Views
2K
  • Last Post
Replies
3
Views
4K
Top