【发布时间】:2018-11-27 17:40:13
【问题描述】:
我知道还有其他带有相同错误消息的问题,但是我已经查看了这些问题,但不明白它如何适用于我目前的情况。所以我正在创建一个矩阵u=np.zeros(shape=(nt,nx)),然后我还有两个数组time=nt*[0] 和middles=nx*[0]
这是我试图实现的关于绘制扩散方程的完整代码:
import numpy as np
import matplotlib.pyplot as plt
import math
D=1 #diffusion constant set equal to 1
C=1 #creation rate of neutrons, set equal to 1
L=math.pi
nx=101 #number of steps in x
nt=10002 #number of timesteps
dx=L/(nx-1) #step in x
dt=0.0001 # time step
Z=(D*dt)/(dx*dx) #constant for diffusion term
Z1=C*dt #constant for u term
x1=np.arange(-math.pi/2+0.03079992797, 0, 0.03079992797)
y=np.arange(0.06159985595,math.pi/2, 0.03079992797)
z = np.hstack((x1, y))
u=np.zeros(shape=(nt,nx))
time=nt*[0]
middles=nx*[0]
u[50,0]=1/dx #setting our delta function
for j in range(0,nt-1):
for i in range(2,nx-1):
u[j+1,i]=Z*(u[j,i+1]-2*u[j,i]+u[j,i-1])+Z1*u[j,i]+u[j,i]
u[j,1]=0
u[j,nx-1]=0
time[j]=dt*j
middles[j]=u[j,((nx-1)/2)]
if i==50 or i==100 or i==250 or i==500 or i==1000 or i==10000:
plt.plot(time,middles)
plt.title('Numerical Solution of the Diffusion Equation')
plt.xlabel('time')
plt.ylabel('middles')
plt.show()
但是我一直在标题中看到此错误消息only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices
错误消息与middles[j]=u[j,((nx-1)/2)]
行有关
我正在尝试从 Matlabe 转换这段代码,如果这能解释一些事情的话
【问题讨论】:
-
欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。您缺少一个
import、几个变量定义和完整的错误消息。 -
错误信息与示例不匹配 - 您可以修改它们以使它们对齐吗?错误肯定是除以 2 创建一个浮点数,但能够专门引用该行会很好。
-
请在你的赋值(=)、数学运算符(+、* 等)和逗号后面加上一些空格,以便代码更具可读性。您可以将 if 语句更改为
if i in [50, 100, 250, 500, 1000, 10000]: -
发布了两个答案后,此问题已更改。你有一个新问题。请将此恢复为原始问题;将新问题作为新问题发布...在您已投入所需的调试工作之后。请参阅这个可爱的 debug 博客寻求帮助。
-
另外,Python 示例的缩进不正确。请记住,在这里提问的目的不仅仅是为了解决您自己的问题,也是为了让未来的用户能够解决类似的问题。
标签: python arrays python-3.x