如何在下面的代码中打印Stot
?这才是我真正想要的
import numpy as np
from scipy.integrate import odeint
A = np.logspace(-2, 2, 5, 10)
lenA = len(A)
B = 2*np.logspace(-4, 1, 6, 10)
lenB = len(B)
S0plot = np.zeros((lenA,lenB))
S1plot = np.zeros((lenA,lenB))
KS0plot = np.zeros((lenA,lenB))
PS1plot = np.zeros((lenA,lenB))
Kplot = np.zeros((lenA,lenB))
Pplot = np.zeros((lenA,lenB))
y0 = [0] * 6
ydot = np.zeros((6,1))
def f(y):
for Bloop in range(lenB):
for Aloop in range(lenA):
A0 = A[Aloop]
Q = B[Bloop]
r1 = 2e-5
r2 = 2e-4
a = 0.001
d = 0.001
k = 0.999
P0 = 1
tf = 1e10
time = np.linspace(0, tf, 1001)
S00 = Q/r1
S0 = y[0]
S1 = y[1]
KS0 = y[2]
PS1 = y[3]
K = y[4]
P = y[5]
ydot[0] = Q-r1*S0+d*KS0-a*K*S0+k*PS1
ydot[1] = k*KS0+d*PS1-S1*(r1+a*K+a*P)
ydot[2] = a*K*S0-(d+k+r1)*KS0
ydot[3] = a*P*S1-(d+k+r1)*PS1
ydot[4] = (d+k+r1)*(KS0)-a*K*(S0+S1)
ydot[5] = (d+k+r2)*PS1-a*P*S1
return ydot[:,0]
y0[0] = S00
y0[1] = 0
y0[2] = 0
y0[3] = 0
y0[4] = A0
y0[5] = P0
soln = odeint(f, y0, time, mxstep = 5000)
S0 = soln[:,0]
S1 = soln[:,1]
KS0 = soln[:,2]
PS1 = soln[:,3]
K = soln[:,4]
P = soln[:,5]
S0plot[Aloop,Bloop] = soln[len(time)-1,0]
S1plot[Aloop,Bloop] = soln[len(time)-1,1]
KS0plot[Aloop,Bloop] = soln[len(time)-1,2]
PS1plot[Aloop,Bloop] = soln[len(time)-1,3]
Kplot[Aloop,Bloop] = soln[len(time)-1,4]
Pplot[Aloop,Bloop] = soln[len(time)-1,5]
Stot = S0plot + S1plot + KS0plot + PS1plot
Stot = f(y)
print(Stot)
我缺少一些基本的东西。代码运行不到一秒钟,但没有输出
我没有导入所需的模块,所以我无法测试代码,也不想为它们制造障碍。但是,您的缩进级别(即范围)似乎已关闭。在全局级别的顶部有
def f(y)
(没有缩进),但是您试图在缩进级别1调用和打印它。这意味着您试图从函数本身调用函数,然后打印结果。你的函数似乎不是递归的,所以我不认为这是你想要的试着去掉最后两行的缩进
相关问题 更多 >
编程相关推荐