【发布时间】:2019-04-01 09:13:43
【问题描述】:
在下面提供的代码中,我试图迭代 2D numpy 数组 [i][k] 最初它是用比我祖父还老的 Fortran 77 编写的代码。我正在尝试使其适应 python。 (对于感兴趣的人:它是一个简单的液压瞬态事件求解器) 请记住,所有变量都是在我的代码中引入的,我不会在此处粘贴。
H = np.zeros((NS,50))
Q = np.zeros((NS,50))
我在这里分配第一行值:
for i in range(NS):
H[0][i] = HR-i*R*Q0**2
Q[0][i] = Q0
CVP = .5*Q0**2/H[N]
T = 0
k = 0
TAU = 1
#Interior points:
HP = np.zeros((NS,50))
QP = np.zeros((NS,50))
while T<=Tmax:
T += dt
k += 1
for i in range(1,N):
CP = H[k][i-1]+Q[k][i-1]*(B-R*abs(Q[k][i-1]))
CM = H[k][i+1]-Q[k][i+1]*(B-R*abs(Q[k][i+1]))
HP[k][i-1] = 0.5*(CP+CM)
QP[k][i-1] = (HP[k][i-1]-CM)/B
#Boundary Conditions:
HP[k][0] = HR
QP[k][0] = Q[k][1]+(HP[k][0]-H[k][1]-R*Q[k][1]*abs(Q[k][1]))/B
if T == Tc:
TAU = 0
CV = 0
else:
TAU = (1.-T/Tc)**Em
CV = CVP*TAU**2
CP = H[k][N-1]+Q[k][N-1]*(B-R*abs(Q[k][N-1]))
QP[k][N] = -CV*B+np.sqrt(CV**2*(B**2)+2*CV*CP)
HP[k][N] = CP-B*QP[k][N]
for i in range(NS):
H[k][i] = HP[k][i]
Q[k][i] = QP[k][i]
记住i 用于行,k 用于列
我期望的是,对于所有 k 列数,应计算值,直到满足 T
RuntimeWarning: divide by zero encountered in true_divide
CVP = .5*Q0**2/H[N]
RuntimeWarning: invalid value encountered in multiply
QP[N][k] = -CV*B+np.sqrt(CV**2*(B**2)+2*CV*CP)
QP[N][k] = -CV*B+np.sqrt(CV**2*(B**2)+2*CV*CP)
ValueError: setting an array element with a sequence.
【问题讨论】:
-
什么是 B?它的尺寸是多少?
-
如果您阅读声明,我说过所有变量都在我的代码中引入,我没有在这里输入它们。将它们视为常量
标签: python-3.x numpy for-loop while-loop