2017-08-31 92 views
-1
import matplotlib.pylab as plt 
from math import * 
import numpy as np 

#parameters 
n= 101 
delx= 0.5 
delt=0.1 
D=1.0 

alpha=D*delt/(delx*delx) 

#initial profile 
a=np.zeros(n) 
a[0]=1.0 

#loop for time and x 
for j in range(0,500): 
    for i in range(1,101): 
    a[i]=a[i]*(1-2*alpha)+alpha*(a[i-1]+a[i+1]) 
    a[100]=a[i]*(1-2*alpha)+2*alpha*(a[i-1]) 

#loop for 20 figures 
for j in range(20): 
plt.plot(a,'r-') 
plt.show() 

我得到Index out of bounds error。我是python的新手,请解释并修复。 (最初的代码在Octave中),所以在Python中有这个问题。索引越界错误

感谢

回答

0

i在内环(顺便说一句,我对是否需要在外环在所有的疑虑)达到100,a[i+1]将尝试访问a[101],它不存在。

此外,在给定当前缩进的情况下,最后一个循环将绘制相同数据的20个副本,这可能不是您所需要的。

+0

这是[a] = a [i] *(1-2 * alpha)+ alpha *(a [i-1] + a [i + 1]) – Ganesh

+0

@Ganesh,'a [i +1]'在这一行的最后会导致问题。 – ForceBru

+0

@Ganesh,我不知道你在想什么。你想在内循环的每次迭代之后进行绘图吗?还是外面的?或者是什么?我想你最好重新阅读Octave代码,并在尝试将其转换为Python之前查看它的运行情况。 – ForceBru

0

for j in range(0,500): 
for i in range(1,101): 
    a[i]=a[i]*(1-2*alpha)+alpha*(a[i-1]+a[i+1]) 
    a[100]=a[i]*(1-2*alpha)+2*alpha*(a[i-1]) 

i100

,可以访问a[i+1]这是a[101],但只能通过100被索引0(大小为n=101

0

当改变N = 101到你的代码可以正常工作。