ODE solving lack of span inputs
2 次查看(过去 30 天)
显示 更早的评论
I have this piece of code and I dont know what is the problem, it says the tspan argument must have at least two arguments.
%Initial conditions
tspan=[0, 168169];
c0=[0.5,0,0];
%Solving for the differential equation for the volume
[t,lnV]=ode45(@cstP_V,tspan,c0);
%Since written in terms of concentration of A, extraxt last value (at time
%t) of the first column
V=exp(lnV(end,1))
%Function is defined
function dlnV=cstP_V(t,C) %Time and initial concentration constants
k=0.0023; %Reaction rate constant
function dC=cstP_C(t,C) %Embeded function determining the rate of change of concentration of compounds
%Assigning inital concentrations
CA=C(1);
CB=C(2);
CC=C(3);
%Defining rate laws
r=k*CA^2;
CA=-r;
CB=r;
CC=r;
%Assigning the rates of change of each compound to the output
dC(1,:)=CA;
dC(2,:)=CB;
dC(3,:)=CC;
end
dCA=cstP_C(t,C); %obtaining rate of change in concentration with initial conditions from main function
[~,C1]=ode45(@cstP_C,[0 1],C); %solving for concentration values (tspan values had to be respecified for after already calling function)
ca=C1(end,1); %determining ca at time t
dlnV=-1*(ca^(-1)*dCA+(k*ca)); %specifying the rate of change in ln(V) from derived relation
end
2 个评论
Steven Lord
2020-11-23
Can you show us the mathematical form of the system of ODEs that you're trying to solve? I'm not sure exactly what you're trying to solve based on the code you've posted.
采纳的回答
Bjorn Gustavsson
2020-11-23
编辑:Bjorn Gustavsson
2020-11-23
OK, you have 2 coupled ODEs. If I expand the D/Dt(log(V(t))) to 1/V(t)*D/Dt(V(t) I'd get something like this:
function dVdtdcadt = odeperhaps(Vca,t)
k = 12; % perhaps some correction...
V = Vca(1);
ca = Vca(2);
dcadt = k*ca^2;
dVdt = -k*ca*V - dcadt*V/ca;
dVdtdcadt = [dVdt;dcadt];
end
These coupled ODEs you then integrate together. You might want to set the ode-options that ensure the solutions are kept positive - check the help and documentation for ode45 and odeset, it should be the 'NonNegative' field that should be used. That ought to make the V and ca in the denominators safe...
Perhaps I misstyped something.
HTH
0 个评论
更多回答(1 个)
Bjorn Gustavsson
2020-11-23
The error is most likely in the second ode45-call. In that subfunction the time t will always be a scalar. You might want to change that to:
[~,C1]=ode45(@cstP_C,[0 t],C);
But that also looks peculiar to me.
HTH
2 个评论
Bjorn Gustavsson
2020-11-23
I'll have to repeat the recommendation of Steven, you might get better help if you show us your ODE-system in mathematical form. The "inner" ODE you use has the fragrance of something "being a bit off" - maybe that equation should be coupled to the others in a more direct way?
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Ordinary Differential Equations 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!