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

 채택된 답변

Cris LaPierre
Cris LaPierre 2021년 3월 13일
편집: Cris LaPierre 2021년 3월 13일

0 개 추천

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

추가 답변 (1개)

Walter Roberson
Walter Roberson 2021년 3월 13일

1 개 추천

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:

카테고리

제품

릴리스

R2019b

태그

Community Treasure Hunt

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

Start Hunting!

Translated by