努力️ 2021-10-18 19:37 采纳率: 66.7%
浏览 36
已结题

for循环下的if条件句总是会打印出上一次循环的结果

代码如下:

import scipy.integrate
import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import electrocardiogram
from scipy.signal import find_peaks
# model
a = []
T=[]
def SIR_model(y, t, b, r0):
    S, I, R = y
    dS_dt = -b * S * I
    dI_dt = b * S * I - r0 * I
    dR_dt = r0* I
    a.append(dI_dt)
    T.append(t)
    return ([dS_dt, dI_dt, dR_dt ])
# initialization
S0 =0.999999# ratio
I0 =0.000001 # ratio
R0 = 0.0 # ratio
r0 =0.1
t = np.linspace(1, 100,100)
for b in np.arange(0.5,0.7,0.1):
 res = scipy.integrate.odeint(SIR_model, [S0, I0, R0], t, args=(b, r0))
    for i in range(len(a)):
        if a[i-1]>0 and a[i]<0 :
            print("a[i-1]=",a[i-1],"a[i]=",a[i])
            print("T[i-1]=",T[i-1])
    print("------------------------------------------------")

打印结果如下:

a[i-1]= 0.0009520121733198328 a[i]= -0.003460775132660618
T[i-1]= 39.32962563186704
------------------------------------------------
a[i-1]= 0.0009520121733198328 a[i]= -0.003460775132660618
T[i-1]= 39.32962563186704
a[i-1]= 0.0026876959796579003 a[i]= -0.0030616548114957565
T[i-1]= 32.038222701776384
------------------------------------------------

这是为啥呢?看到的朋友帮忙解答下!万分感谢!

  • 写回答

4条回答 默认 最新

  • 关注

    你两个for循环不应该嵌套,应该是前面的循环对a和T添加完成之后再用一个循环输出

    import scipy.integrate
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.misc import electrocardiogram
    from scipy.signal import find_peaks
    # model
    a = []
    T=[]
    def SIR_model(y, t, b, r0):
        S, I, R = y
        dS_dt = -b * S * I
        dI_dt = b * S * I - r0 * I
        dR_dt = r0* I
        a.append(dI_dt)
        T.append(t)
        return ([dS_dt, dI_dt, dR_dt ])
    # initialization
    S0 =0.999999# ratio
    I0 =0.000001 # ratio
    R0 = 0.0 # ratio
    r0 =0.1
    t = np.linspace(1, 100,100)
    for b in np.arange(0.5,0.7,0.1):
        res = scipy.integrate.odeint(SIR_model, [S0, I0, R0], t, args=(b, r0))
    for i in range(len(a)):
        if a[i-1]>0 and a[i]<0 :
            print("a[i-1]=",a[i-1],"a[i]=",a[i])
            print("T[i-1]=",T[i-1])
    print("------------------------------------------------")
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码