Hi. This is the code i've been working on, to find values of a column vector concentration c, that varies with time t, as a chemical reaction happens, which basically means solving three rate equations simultaneously.
The error is given below.
The code is given below here.
clear
global k1 k2 %rate constants
k1=2; k2=1; ca0=2; tfin=(1/3);
C0(1)=ca0;C0(2)=0;C0(3)=0; %initial condition of c
timspan=[0,tfin];
[t,C]=ode45(@exampleode,timspan,C0);
%function to calculate rate of change of elements in "c"
function dc_dt=exampleode(C)
global k1 k2
dc_dt(1)=-k1*C(1)-k2*C(1)*C(1);
dc_dt(2)=k1*C(1);
dc_dt(3)=k2*C(1)^2;
end

 Réponse acceptée

Cris LaPierre
Cris LaPierre le 13 Mar 2021
Modifié(e) : Cris LaPierre le 13 Mar 2021

0 votes

The first input to your odefun needs to be t.
Also note that the output of your odefun needs to be a column vector.
Final comment is to not use global variables. Here I use nested functions, but you can also see this example for a way to pass them in the function declaration.
function Ct()
k1=2; k2=1; ca0=2; tfin=(1/3);
C0(1)=ca0;C0(2)=0;C0(3)=0; %initial condition of c
timspan=[0,tfin];
[t,C]=ode45(@exampleode,timspan,C0);
%function to calculate rate of change of elements in "c"
function dc_dt=exampleode(t,C)
dc_dt(1,1)=-k1*C(1)-k2*C(1)*C(1);
dc_dt(2,1)=k1*C(1);
dc_dt(3,1)=k2*C(1)^2;
end
end

Plus de réponses (1)

Walter Roberson
Walter Roberson le 13 Mar 2021

1 vote

The ode function always gets passed time and boundary conditions. It is not required to pay attention to either, but it must be prepared to receive them. You can create a function that does not pass through t but does pass through k1, k2 so that you can get rid of the globals:

Produits

Version

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by