ℒiu 2022-01-01 23:14 采纳率: 50%
浏览 207
已结题

matlab ode45函数演化博弈仿真,报错 索引超出组元素的数目,请帮我看下

matlab ode45函数演化博弈仿真,报错 索引超出组元素的数目

以下是定义函数

function dydt=czc(y,t,c2,c3,t2,e1,e2,e3,d,j,w,f,h,r1,a,b,v,o,q1,q2)
dydt=zeros(3,1);
dydt(1)=y(1)*(1-y(1))*(y(2)*(-q1^(o)*v*f^(b)/(q1^(o)+(1-q1)^o)^(1/o)-q1^(o)*v*h^(b)/(q1^(o)+(1-q1)^o)^(1/o)+v*h^(b))+y(3)*(-q2^(o)*v*f^(b)/(q2^(o)+(1-q2)^o)^(1/o)-q2^(o)*v*h^(b)/(q2^(o)+(1-q2)^o)^(1/o)+v*h^(b))+y(2)*y(3)*(-v*f^(b)+q1^(o)*v*f^(b)/(q1^(o)+(1-q1)^o)^(1/o)+q2^(o)*v*f^(b)/(q2^(o)+(1-q2)^o)^(1/o)+q1^(o)*v*h^(b)/(q1^(o)+(1-q1)^o)^(1/o)+q2^(o)*v*h^(b)/(q2^(o)+(1-q2)^o)^(1/o)+v*h^(b))+r1-v*h^(b));
dydt(2)=y(2)*(1-y(2))*(y(1)*q1^(o)*w^(a)/(q1^(o)+(1-q1)^o)^(1/o)-y(1)*y(3)*q1^(o)*w^(a)/(q1^(o)+(1-q1)^o)^(1/o)-c2+t2-e1+e2+j);
dydt(3)=y(3)*(1-y(3))*(y(1)*q2^(o)*f^(a)/(q2^(o)+(1-q2)^o)^(1/o)+y(2)*e3+y(1)*y(2)*(f^(a)-q1^(o)*f^(a)/(q1^(o)+(1-q1)^o)^(1/o)-q2^(o)*f^(a)/(q2^(o)+(1-q2)^o)^(1/o)+q1^(o)*v*w^(b)/(q1^(o)+(1-q1)^o)^(1/o))-c3-e3+d);
end

以下是绘图过程

a=0.88,b=0.88,o=0.69,v=1.1,c2=5,c3=15,t2=10,e1=10,e2=10,e3=10,j=1,d=1,w=5,q1=0.5,q2=0.8,f=5,h=5,r1=4;
for i=0.1:0.2:1
    for j=0.1:0.2:1
        for k=0.1:0.2:1
            [t,y]=ode45('czc',[0 50],[i j k]);
            figure(1)
            grid on
            plot3(y(:,1),y(:,2),y(:,3),'linewidth',1);
            set(gca,'XTick',[0:0.2:1],'YTick',[0:0.2:1],'ZTick',[0:0.2:1])
            hold on
            axis([0 1 0 1 0 1])
            view([45 10])
        end
    end
end
xlabel('x','Rotation',0);
ylabel('y','Rotation',0);
zlabel('z','Rotation',360,'position',[0 0 1.05]);

以下是报错内容

索引超出数组元素的数目(1)。

出错 czc (第 3 行)
dydt(1)=y(1)*(1-y(1))*(y(2)*(-q1^(o)*v*f^(b)/(q1^(o)+(1-q1)^o)^(1/o)-q1^(o)*v*h^(b)/(q1^(o)+(1-q1)^o)^(1/o)+v*h^(b))+y(3)*(-q2^(o)*v*f^(b)/(q2^(o)+(1-q2)^o)^(1/o)-q2^(o)*v*h^(b)/(q2^(o)+(1-q2)^o)^(1/o)+v*h^(b))+y(2)*y(3)*(-v*f^(b)+q1^(o)*v*f^(b)/(q1^(o)+(1-q1)^o)^(1/o)+q2^(o)*v*f^(b)/(q2^(o)+(1-q2)^o)^(1/o)+q1^(o)*v*h^(b)/(q1^(o)+(1-q1)^o)^(1/o)+q2^(o)*v*h^(b)/(q2^(o)+(1-q2)^o)^(1/o)+v*h^(b))+r1-v*h^(b));

出错 odearguments (第 90 行)
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

出错 ode45 (第 115 行)
  odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);

出错 czctu (第 8 行)
            [t,y]=ode45('czc',[0 50],[i j k]);

对于定义函数中的符号,实际上是想完成以下运算

img

辛苦了,请帮我解答一下

  • 写回答

1条回答 默认 最新

  • 技术专家团-Joel 2022-01-02 09:42
    关注

    你好,帮你更正如下,主要是改了ode45调用czc函数的方式,我修改之后的格式是最经典,最能反应matlab求ode本质的了

    a=0.88; b=0.88; o=0.69; v=1.1; c2=5; c3=15;
    t2=10; e1=10; e2=10; e3=10; j=1; d=1; w=5; 
    q1=0.5; q2=0.8; f=5; h=5; r1=4;
    for i=0.1:0.2:1
        for j=0.1:0.2:1
            for k=0.1:0.2:1
                [t,y]=ode45(@(t,y)czc(y,t,c2,c3,t2,e1,e2,e3,d,j,w,f,h,r1,a,b,v,o,q1,q2),[0 50],[i j k]); % 这里修改了一下,一般是先t后y,然后其它参数放后面
                figure(1)
                grid on
                plot3(y(:,1),y(:,2),y(:,3),'linewidth',1);
                set(gca,'XTick',[0:0.2:1],'YTick',[0:0.2:1],'ZTick',[0:0.2:1])
                hold on
                axis([0 1 0 1 0 1])
                view([45 10])
            end
        end
    end
    xlabel('x','Rotation',0);
    ylabel('y','Rotation',0);
    zlabel('z','Rotation',360,'position',[0 0 1.05]);
    
    function dydt=czc(y,t,c2,c3,t2,e1,e2,e3,d,j,w,f,h,r1,a,b,v,o,q1,q2)
    dydt=zeros(3,1);
    dydt(1)=y(1)*(1-y(1))*(y(2)*(-q1^(o)*v*f^(b)/(q1^(o)+(1-q1)^o)^(1/o)-q1^(o)*v*h^(b)/(q1^(o)+(1-q1)^o)^(1/o)+v*h^(b))+y(3)*(-q2^(o)*v*f^(b)/(q2^(o)+(1-q2)^o)^(1/o)-q2^(o)*v*h^(b)/(q2^(o)+(1-q2)^o)^(1/o)+v*h^(b))+y(2)*y(3)*(-v*f^(b)+q1^(o)*v*f^(b)/(q1^(o)+(1-q1)^o)^(1/o)+q2^(o)*v*f^(b)/(q2^(o)+(1-q2)^o)^(1/o)+q1^(o)*v*h^(b)/(q1^(o)+(1-q1)^o)^(1/o)+q2^(o)*v*h^(b)/(q2^(o)+(1-q2)^o)^(1/o)+v*h^(b))+r1-v*h^(b));
    dydt(2)=y(2)*(1-y(2))*(y(1)*q1^(o)*w^(a)/(q1^(o)+(1-q1)^o)^(1/o)-y(1)*y(3)*q1^(o)*w^(a)/(q1^(o)+(1-q1)^o)^(1/o)-c2+t2-e1+e2+j);
    dydt(3)=y(3)*(1-y(3))*(y(1)*q2^(o)*f^(a)/(q2^(o)+(1-q2)^o)^(1/o)+y(2)*e3+y(1)*y(2)*(f^(a)-q1^(o)*f^(a)/(q1^(o)+(1-q1)^o)^(1/o)-q2^(o)*f^(a)/(q2^(o)+(1-q2)^o)^(1/o)+q1^(o)*v*w^(b)/(q1^(o)+(1-q1)^o)^(1/o))-c3-e3+d);
    end
    
    
    

    效果:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月10日
  • 已采纳回答 1月2日
  • 创建了问题 1月1日

悬赏问题

  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?
  • ¥50 invest生境质量模块