注册 登录
编程论坛 Matlab

用ode45求解12个常微分方程组,报错不知道咋改

初学者_123 发布于 2021-11-30 10:42, 4735 次点击
%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编辑过]

2 回复
#2
初学者_1232022-03-17 19:44
自己已解决
#3
mocun2023-03-22 14:10
回复 2楼 初学者_123
你好,请问怎么解决的,我遇到了同样的问题
1