MATLAB .Solving ODE Error in MATLAB Using ODE45 Solver

AI Thread Summary
The discussion centers on resolving an error encountered while using the ODE45 solver in MATLAB to solve the Lotka-Volterra equations. The error message indicates that the input argument "y" is undefined. To address this, it is recommended to separate the function definition from the main script by placing the function in its own m-file. The correct structure involves creating a main script that calls the ODE45 function and a separate m-file for the Lotka-Volterra function. Additionally, a workaround is suggested where the main m-file starts with a dummy function to avoid issues with nested functions. This approach has been tested and confirmed to work effectively.
matlabphd
Messages
2
Reaction score
0
Dear all. I am trying to solve an ODE in MATLAB using ODE45 solver. But the programe keep saying

? Input argument "y" is undefined.

Error in ==> lvv at 4
yprime=[a*y(1)-b*y(1)*y(2);-r*y(2)+c*y(1)*y(2)];

Can anybody be of help? Please.

The complete code is this:
function yprime=lvv(t,y)
%LV: Contains Lotka-Volterra equations
a=.5471;b=.0281;c=.0266;r=.8439;
yprime=[a*y(1)-b*y(1)*y(2);-r*y(2)+c*y(1)*y(2)];
[t,y]=ode45(@lvv,[0 20],[30;4])
plot(t,y(:,1))
Thanks
 
Physics news on Phys.org
make on m-file called whatever you want an place:

[t,y]=ode45(@lvv,[0 20],[30;4])
plot(t,y(:,1))

this in that. Then make another m-file called lvv and place

function yprime=lvv(t,y)
%LV: Contains Lotka-Volterra equations
a=.5471;b=.0281;c=.0266;r=.8439;
yprime=[a*y(1)-b*y(1)*y(2);-r*y(2)+c*y(1)*y(2)];

this in that, then it works, have tested it. You should always place functions in their own m-file, there are ways to put them in the same, but if you place it in another, then you never get problems.
 
a way I sometimes use, is to trick MATLAB to think of the lvv function as a nested function by making your m-file into a function that doesn't do anything then it works, that is writing

function idontdoanything=LaLaLa

[t,y]=ode45(@lvv,[0 20],[30;4])
plot(t,y(:,1))


function yprime=lvv(t,y)
%LV: Contains Lotka-Volterra equations
a=.5471;b=.0281;c=.0266;r=.8439;
yprime=[a*y(1)-b*y(1)*y(2);-r*y(2)+c*y(1)*y(2)];


that is start you m-file with a dummy function.
 

Similar threads

Replies
5
Views
2K
Replies
1
Views
3K
Replies
4
Views
1K
Replies
2
Views
3K
Replies
2
Views
7K
Back
Top