2017-04-07 252 views
0

我对python相当陌生,我试图用laplace方程和jacobi方法重新创建金属盒中的电位。我已经写了一个似乎最初工作的代码,但是我收到错误:IndexError:索引8超出了轴7的大小为7的界限,并且无法找出原因。任何帮助都是极好的!使用jacobi方法求解拉普拉斯方程PYTHON

from visual import* 
from visual.graph import* 
import numpy as np 

lenx = leny = 7 
delta = 2 

vtop = [-1,-.67,-.33,.00,.33,.67,1] 
vbottom = [-1,-.67,-.33,.00,.33,.67,1] 
vleft = -1 
vright = 1 

vguess= 0 

x,y = np.meshgrid(np.arange(0,lenx), np.arange(0,leny)) 

v = np.empty((lenx,leny)) 
v.fill(vguess) 

v[(leny-1):,:] = vtop 
v [:1,:] = vbottom 
v[:,(lenx-1):] = vright 
v[:,:1] = vleft 

maxit = 500 

for iteration in range (0,maxit): 
    for i in range(1,lenx): 
     for j in range(1,leny-1): 
      v[i,j] = .25*(v[i+i][j] + v[i-1][j] + v[i][j+1] + v[i][j-1]) 
      print v 
+1

欢迎来到StackOverflow。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在发布您的MCVE代码并准确描述问题之前,我们无法为您提供有效的帮助。 这包括我们可以粘贴并运行以重现问题的代码以及完整的错误消息。 – Prune

回答

0

刚刚从你的代码看一眼它好像索引误差在这部分情况,并进行相应的改变:

# you had v[i+i][j] instead if v[i+1][j] 
v[i,j] = .25*(v[i+1][j] + v[i-1][j] + v[i][j+1] + v[i][j-1]) 

您只需添加额外i你的索引哪些肯定会超出范围

+0

男人......应该多读一遍非常感谢你! –

+0

我的荣幸。祝你好运这个代码!我目前正在我的大学进行静电学课,这种编码非常适用! –