Matlab ode45,ODE4参数错误,生长动力学

Matlab ode45,ODE4参数错误,生长动力学,matlab,ode,ode45,Matlab,Ode,Ode45,我正试图解决这个与微藻生长动力学相关的ODE系统,我附上了我的函数和脚本。我得到一些与参数相关的错误。请让我知道我的错误在哪里谢谢:)系统由7个ODE和7个相应的状态变量组成,带有25个参数 功能 函数dx=odesys(t,var) %dxdt=var(1); %dldt=var(2); %dsdt=var(3); %dndt=var(4); %gadt=var(5); %Fadt=var(6); %dhdt=var(7); mumax=var(1); Kxs=var(2); Kixs=var

我正试图解决这个与微藻生长动力学相关的ODE系统,我附上了我的函数和脚本。我得到一些与参数相关的错误。请让我知道我的错误在哪里谢谢:)系统由7个ODE和7个相应的状态变量组成,带有25个参数

功能

函数dx=odesys(t,var) %dxdt=var(1); %dldt=var(2); %dsdt=var(3); %dndt=var(4); %gadt=var(5); %Fadt=var(6); %dhdt=var(7); mumax=var(1); Kxs=var(2); Kixs=var(3); Kxn=var(4); Kixn=var(5); qlmax=var(6); Kls=var(7); Kils=var(8); Kinl=var(9); Yxs=var(10); Yxn=var(11); Kh=var(12); Yls=var(13); Kxl=var(14); Kixl=var(15); Kli=var(16); Kili=var(17); sigma=var(18); k1=var(19); Kgas=var(20); Kgan=var(21); Kigan=var(22); k2=var(23); Kfas=var(24); Kfan=var(25); %变数 %无油生物质——x(1) %脂质生成率——x(2) %基板消耗率——x(3) %N消耗率x(4) %副产品GA--x(5) %副产品FA--x(6) %pH值变化——x(7) %速率方程 S=2.01;%总重 N=0.098;%总重 X=0.001;%总重 Io=125*10-6;%E/m^2*s l=1; Il=Io*exp(-sigma*X*l); mux=mumax*(S/(S+Kxs+(S^2/Kixs))*(N/(N+Kxn+(N^2/Kixn))*(Il/(Il+Kxl+(Il^2/Kixl)); mul=(qlmax)*(S/(S+Kls+(S^2/Kils))*(Kinl/(N+Kinl)*(Il/(Il+Kli+(Il^2/Kili))); %颂歌 dx(1)=(mux*X); dx(2)=(mul*X); dx(3)=((1/Yxs)*dx(1))-((1/Yls)*dx(2)); dx(4)=(1/Yxn)*dx(1)); dx(5)=(k1*(S/(S+Kgas))*(N/(N+Kgan+(N^2/Kigan)); dx(6)=(k2*(S/S+Kfas)*(N/N+Kfan)); dx(7)=-Kh*dx(3); %函数返回值始终是一个向量长度,等于 %模型中的方程,并且必须是列向量 dx=dx′; %dx=[dx(1);dx(2);dx(3);dx(4);dx(5);dx(6);dx(7)]; 结束 脚本

全部清除
clc
%求解ODE的时间跨度
tspan=[0 120];
int=[0,0,0,0,0,0,0];
%条件
var=[0.227;0.050;9.923;0.065;0.5;0.121;6.554;0.110;380.023;1.47;6.883;0.879;0.064;19.519;2053.924;15.023;2152.918;34.104;0.329;1.456;12.976;2.533;1.4055;12.976;2.533];
V=常微分方程(tspan(1),var);
iscolumn(V)%false
isrow(V)%正确吗?
%用ODE 45求解系统
[t,X]=ode45(@odesys,tspan,int,var);
错误函数

参数中的错误(第90行) f0=feval(ode,t0,y0,args{:});%ODE15I将args{1}设置为yp0。 ode45中的错误(第115行) odearguments(FcnHandlesUsed、解算器名称、ode、tspan、y0、选项、varargin); 运行中出错(第17行) [t,X]=ode45(@odesys,tspan,int,var);
一种简单的方法是在odesys函数中定义“var”变量,而不是在脚本中:

function dx=odesys(t, x)
%dxdt=var(1);
%dldt=var(2);
%dsdt=var(3);
%dndt=var(4);
%gadt=var(5);
%Fadt=var(6);
%dhdt=var(7);
var=[0.227;0.050;9.923;0.065;0.5;0.121;6.554;0.110;380.023;1.47;6.883;0.879;0.064;19.519;2053.924;15.023;2152.918;34.104;0.329;1.456;12.976;2.533;1.4055;12.976;2.533];
mumax=var(1);
Kxs=var(2);
...
注意函数声明中的更改。 您必须在函数声明中添加x参数。这是您要区分的变量。你没有在方程中使用它,所以你可以给它命名,但它应该包括在内

最后,脚本中不需要“var”变量,如下所示:

V = odesys(tspan(1));
在这里:

[t,X]=ode45(@odesys,tspan,int);

您需要使用
odeset
设置任何可选参数,如ODE函数的附加参数
f(t,x,args)
x
参数需要存在并且是状态向量,以便
x+s*dx
是状态空间中的有效光线。