用ode45求解12个常微分方程组,报错不知道咋改
%Chaos–hyperchaos transition in three identical quorum-sensing mean-field coupled ring oscillators%initial state
history=rand(12,1);
tspan =[0,100];
x0=history(1:3,1);
y0=history(4:6,1);
z0=history(7:9,1);
s0=history(10:12,1);
%--------------Parameters seting------------------------------------------
beta1=0.5;
beta2=0.1;
beta3=0.1;
n=3;
kS0=1;
kS1=0.01;
Eta=2;
K=15;
Q=0.01;
alpha=2777;
[t,x] = ode45(odefunction1,odefunction2,odefunction3,odefunction4,tspan,history);
plot(t,x(:,1),t,x(:,2),t,x(:,3));
%-----------------------------------------------------------------------
Sext=Q*(s(1)+s(2)+s(3))/3;
function dxdt=odefunction1(t,x,beta1,alpha,n)
dxdt = zeros(3,1);
dxdt(1)=beta1*(-x(1)+alpha/(1+z(1)^n));
dxdt(2)=beta1*(-x(2)+alpha/(1+(z(2))^n));
dxdt(3)=beta1*(-x(3)+alpha/(1+(z(3))^n));
end
function dydt=odefunction2(t,x,y,beta2,alpha,n)
dydt=zeros(3,1);
dydt(1)=beta2*(-y(1)+alpha/(1+x(1)^n));
dydt(2)=beta2*(-y(2)+alpha/(1+(x(2))^n));
dydt(3)=beta2*(-y(3)+alpha/(1+(x(3))^n));
end
function dzdt=odefunction3(t,y,z,s,beta3,K,alpha)
dzdt=zeros(3,1);
dzdt(1)=beta3*(-z(1)+alpha/(1+y(1)^n)+K*s(1)/(1+s(1)));
dzdt(2)=beta3*(-z(2)+alpha/(1+(y(2))^n)+K*s(2)/(1+s(2)));
dzdt(3)=beta3*(-z(3)+alpha/(1+(y(3))^n)+K*s(3)/(1+s(3)));
end
function dsdt=odefunction4(t,s,y,kS0,kS1,Eta,Sext)
dsdt=zeros(3,1);
dsdt(1)=-kS0*s(1)+kS1*y(1)-Eta*(s(1)-Sext);
dsdt(2)=-kS0*s(2)+kS1*y(2)-Eta*(s(2)-Sext);
dsdt(3)=-kS0*s(3)+kS1*y(3)-Eta*(s(3)-Sext);
end
问题1:想用ode45求解上面12个微分方程组的数值解,初始条件设置为随机的,向画t关于x1,x2,x3的时间序列图,老是报错,而且工作区也没有变量x,y,x,s的数据,
程序运行后出现以下错误:
错误使用 odearguments (line 21)
如果 ode45 的第一个参数为函数句柄,则 tspan 参数必须至少包含两个元素。
出错 ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
出错 chaos1 (line 20)
[t,x] = ode45(@odefunction1,@odefunction2,@odefunction3,@odefunction4,tspan,history);
问题2:我定义了多个函数,在利用ode45时,[t,x]=ode45(),()中该如何填,应该不能同时@多个函数?
问题3:也尝试过另一种定义函数的方法,
function [t,x(1),y(1),z(1),s(1)]=ode1(x(1),y(1),z(1),s(1))
dxdt(1)=beta1*(-x(1)+alpha/(1+z(1)^n));
dydt(1)=beta2*(-y(1)+alpha/(1+x(1)^n));
dzdt(1)=beta3*(-z(1)+alpha/(1+y(1)^n)+K*s(1)/(1+s(1)));
dsdt(1)=-kS0*s(1)+kS1*y(1)-Eta*(s(1)-Sext);
但这时,不知道如何定义函数,因为是不同的变量x,y,z,s,如果是第二种函数定义,function后面该咋写,求大神指导
[此贴子已经被作者于2021-11-30 11:01编辑过]