How to set up two ODE functions in matlab
이전 댓글 표시
Hi,I am trying to set up two ode functions fot matlab to solve. The ODEs does not have any analytical solutions, but I want to get an numerical solution and plot in matlab. The equations are describing tumor growth, and are called the Gyllenberg-Webb model, being as follows:
dP/dt=(b-r_o(N))*P+r_i(N)*Q
dQ/dt=r_o(N)*P-(r_i(N)+my_q)*Q
with initial conditions P(0)=P_0>0 and Q(0)>or equal to 0.
So I am wondering if this ODE system is possible to set up, because of the three variables; P,Q and r_o and r_i being functions of N aswell. Also P, Q and N are functions of time, and N=P+Q (read: total cell population=cell pop.1 + cell pop.2 in the tumor).
Or if it would be better to use this system of only P and N variables:
dP/dt=(b-r_i(N)-r_o(N))*P+r_i(N)*N
dN/dt=(b+my_q)*P-my_q*N
I was thinking of setting it up with the Eulers method, but dont know exactly how, and by using the ode45 function in matlab.
Any help would be great appreciated.
답변 (1개)
Are Mjaavatten
2018년 4월 11일
편집: Are Mjaavatten
2018년 4월 11일
You should collect your unknowns P and N in a vector x, and define a function for the right-hand side of your ODE system, something like this:
function dxdt = rhs(t,x,b,r_i,r_o,my_q)
P = x(1);
N = x(2);
dPdt = (b-r_i(N)-r_o(N))*P+r_i(N)*N;
dNdt = (b+my_q)*P-my_q*N;
dxdt = [dPdt;dNdt];
end
Save this as rhs.m.
Then create a script where you define all parameters and functions, as well as initial values. The ODE solvers do not take extra function parameters explicitly, so we define an inline function f of only t and x.
% Define parameters and functions going into your ODE system
b = 1;
r_i = @(N) sqrt(N) ;
r_o = @(N) exp(-N);
my_q = -4;
% Define an inline function f(t,x), where the extra parameters to rhs are
% "baked in":
f = @(t,x) rhs(t,x,b,r_i,r_o,my_q);
% Initialize:
P0 = 1;
N0 = 2;
x0 = [P0;N0];
% Solve:
[t,x] = ode45(f,x0,[0,100]);
P = x(:,1);
N = x(:,2);
plot(t,P);
If your system diverges very quickly, it may be useful to start with a very short time interval, to see what happens. For some parameter sets you system may be stiff, and ode45 may be very slow. If so, try e.g. ode15s.
댓글 수: 9
Kristoffer Ree
2018년 4월 11일
편집: Kristoffer Ree
2018년 4월 11일
Are Mjaavatten
2018년 4월 11일
편집: Are Mjaavatten
2018년 4월 11일
Sorry, I was a bit too quick. I have modified my answer. This should run ok. Modify to use your own parameters and functions. You may of course plot both P and N in the same plot, by
plot(t,x)
Kristoffer Ree
2018년 4월 11일
Kristoffer Ree
2018년 4월 11일
Are Mjaavatten
2018년 4월 11일
편집: Are Mjaavatten
2018년 4월 11일
The expression r_i = @(N) sqrt(N) defines an anonymous function and creates a function handle to this function. Read more in the links.
Your expression for dNdt does not equal dQdT + dPdt. If I correct this expression, cell population Q goes negative at t = 0.06 and you hit a singularity at around t = 0.375. You see this better if you use ode15s.
This is probably not what you want. You should re-examine your parameters and possibly your equations.
Kristoffer Ree
2018년 4월 11일
편집: Kristoffer Ree
2018년 4월 11일
Are Mjaavatten
2018년 4월 11일
편집: Are Mjaavatten
2018년 4월 11일
The error comes from your assignment of N and Q in pqn. It should be:
P = x(1);
Q = x(2);
N = x(3);
Now Q stays positive and the singularity disappears.
Kristoffer Ree
2018년 4월 11일
카테고리
도움말 센터 및 File Exchange에서 Programming에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
