Python 在循环中写入多个文件会得到相同的文件

Python 在循环中写入多个文件会得到相同的文件,python,file,loops,odeint,Python,File,Loops,Odeint,试图求解通过循环产生的具有不同初始条件的方程 由于“while”循环,我想获得多个文件,每个文件表示不同的初始条件,但每个文件都是相同的,数据不会更改。看不出我错在哪里了 from scipy.integrate import odeint P = 0 # birth rate d = 0.0001 # natural death percent (per day) B = 0.0095 # transmission percent (per day) G = 0.0001

试图求解通过循环产生的具有不同初始条件的方程

由于“while”循环,我想获得多个文件,每个文件表示不同的初始条件,但每个文件都是相同的,数据不会更改。看不出我错在哪里了

from scipy.integrate import odeint

P = 0      # birth rate
d = 0.0001  # natural death percent (per day)
B = 0.0095  # transmission percent  (per day)
G = 0.0001  # resurect percent (per day)
A = 0.0001  # destroy percent  (per day)

# solve the system dy/dt = f(y, t)
def f(y, t):
     Si = y[0]
     Zi = y[1]
     Ri = y[2]
     # the model equations (see Munz et al. 2009)
     f0 = P - B*Si*Zi - d*Si
     f1 = B*Si*Zi + G*Ri - A*Si*Zi
     f2 = d*Si + A*Si*Zi - G*Ri
     return [f0, f1, f2]

Si0 = 50
Zi0 = 20
Ri0= 20

for i in range(20):   
    while Zi0 < 105:
        Zi0 += 5
        y0=[Si0,Zi0,Ri0]
        print(Zi0)


        y = odeint(f, y0, [k*500 for k in range(40)], mxstep=1000)


    print('\n'.join(','.join('%+13.5f'%x for x in row) for row in \
    y),file=open("test_"+str(i)+".txt", "a"))
从scipy.integrate导入odeint
P=0#出生率
d=0.0001#自然死亡百分比(每天)
B=0.0095#传输百分比(每天)
G=0.0001#重拾百分比(每天)
A=0.0001#破坏百分比(每天)
#求解系统dy/dt=f(y,t)
def f(y,t):
Si=y[0]
Zi=y[1]
Ri=y[2]
#模型方程(见Munz等人,2009年)
f0=P-B*Si*Zi-d*Si
f1=B*Si*Zi+G*Ri-A*Si*Zi
f2=d*Si+A*Si*Zi-G*Ri
返回[f0,f1,f2]
Si0=50
Zi0=20
Ri0=20
对于范围(20)内的i:
Zi0<105时:
Zi0+=5
y0=[Si0,Zi0,Ri0]
打印(Zi0)
y=odeint(f,y0,[k*500表示范围(40)],mxstep=1000)
为中的行打印('\n'.join(','.join('%+13.5f'%x,表示行中的x'))\
y) ,file=open(“test_”+str(i)+“.txt”,“a”))

问题可能是您没有重置Zi0。因此,在for循环中,它第一次执行while循环,直到Zi0为105。然后第二个for循环开始,Zi0已经是105,所以它跳过while循环并打印,然后继续跳过for循环的其余部分并打印


不完全确定每个for循环都要更改什么,因此无法为您提供更多帮助。。。抱歉。

什么是示例输出?Zi值(具有不同的初始条件)始终为:105156158159。。。对于所有20个文件,能否在
f
函数的顶部放置一个
print(y)
?然后告诉我们结果是什么。哦,对了,每次Zi0发生变化时,我怎么能输出到一个文件?是我对文件编写器的放置错误吗?每次Zi0更改时都要输出吗?摆脱“当Zi0<105时”。然后它将Zi0增加5,并且每次打印所有内容。但是在这种情况下,Zi0不会增加到无穷大吗?我希望一旦Zi0达到105,集成就停止。它将持续21个周期,因为它在for循环中。这不就是为什么您首先在那里使用for循环吗?for循环只是在最后命名不同的输出文件;test0、test1等