湛蓝沉醉 2021-05-20 23:00 采纳率: 25%
浏览 18

matlab的for迭代

运行了一下发现出大问题

为什么这串代码的M只取了最后的M=0.8,而中间的M=0和M=0.4都没有生效啊

求大佬解释

S=N-E-I-R-D-M*N

for i =1:length(T)-1
    if i>=0&&i<=30
        M=0;
        S(i+1)=S(i)- contact_I*infect_rate*S(i)*I(i)/N -contact_E*infect_rate*S(i)*E(i)/N;
        E(i+1) = E(i) + contact_I*infect_rate*S(i)*I(i)/N-A*E(i) + contact_E*infect_rate*S(i)*E(i)/N;
        I(i+1) = I(i) + A*E(i) - r*I(i)-Death_from_illness_rate*I(i);
        R(i+1) = R(i) + r*I(i);
    elseif i>=31&&i<=60
        M=0.4;
        S(i+1)=S(i)- contact_I*infect_rate*S(i)*I(i)/N -contact_E*infect_rate*S(i)*E(i)/N;
        E(i+1) = E(i) + contact_I*infect_rate*S(i)*I(i)/N-A*E(i) + contact_E*infect_rate*S(i)*E(i)/N;
        I(i+1) = I(i) + A*E(i) - r*I(i)-Death_from_illness_rate*I(i);
        R(i+1) = R(i) + r*I(i);
    else
        M=0.8;
        S(i+1)=S(i)- contact_I*infect_rate*S(i)*I(i)/N -contact_E*infect_rate*S(i)*E(i)/N;
        E(i+1) = E(i) + contact_I*infect_rate*S(i)*I(i)/N-A*E(i) + contact_E*infect_rate*S(i)*E(i)/N;
        I(i+1) = I(i) + A*E(i) - r*I(i)-Death_from_illness_rate*I(i);
        R(i+1) = R(i) + r*I(i);
    end
end 
plot(T,S,T,E,T,I,T,R,T,D);grid on;

  • 写回答

1条回答 默认 最新

  • CSDN专家-Matlab_Fans 2021-05-21 19:21
    关注

    因为M是标量,后面循环后执行的分支对M赋值时,会覆盖前面的M值。

    评论

报告相同问题?

悬赏问题

  • ¥15 elementui上传结合oss接口断点续传,现在只差停止上传和继续上传,各大精英看下
  • ¥100 单片机hardfaulr
  • ¥20 手机截图相片分辨率降低一半
  • ¥50 求一段sql语句,遇到小难题了,可以50米解决
  • ¥15 速求,对多种商品的购买力优化问题(用遗传算法、枚举法、粒子群算法、模拟退火算法等方法求解)
  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费
  • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)
  • ¥15 Workbench中材料库无法更新,如何解决?
  • ¥20 如何推断此服务器配置