2015-03-13 32 views
0

我是python的新手,當我在使用python編寫Gaussian elimination時遇到了一些問題。我收到了錯誤信息:python上的線性代數(高斯消元)

IndexError: index 4 is out of bounds for axis 0 with size 4

我該如何糾正它?

A = array( [[3,-1,-1,0,0,0], 
      [-1,4,-1,-1,0,0], 
      [0,0,-1,-1,4,-1], 
      [0,0,0,-1,-1,3]], float) 

v = array([5,5,0,0,0,0],float) 

N = len(v) 

for m in range(N): 
    Div = A[m,m] 
    A[m,:]/= Div 
    v[m]/= Div 

for i in range(m + 1, N): 
    mult= A[i,m] 
    A[i,:]-= mult*A[m,:] 
    v[i]-= mult*v[m] 


x = empty(N,float) 
for m in range(N-1,-1,-1): 
    x[m] = v[m] 
for i in range(m + 1,N): 
    x[m]-= A[m,i]*x[i] 

print(x) 

回答

0

在我看來,你有一個大小爲4x6的矩陣,這意味着你陣列的每個維度的索引分別從0到3和0到5。

然後你有一個for循環從0到範圍(N),其中N是一個6元素數組的長度。這是m作爲迭代器的循環。

最後,你有(我假設,就是要)+ 1到N的內環從要去並使用該索引中的一種行:

for i in range(m + 1, N): 
    mult= A[i,m] 

變量在這裏我將每次都會去N(在這種情況下是6),但是你的A矩陣只能在行索引中出現0到3。

總結:

A是4x6的矩陣 N是長度爲6 你正在試圖訪問A [4,M]在下面的環(以及A [5,米]和A [ 6,M]。

for i in range(m + 1, N): 
    mult= A[i,m] 

當你最多隻能達到A [3,M]

編輯:

其實,錯誤發生早一點比我mentio奈德先前:

for m in range(N): 
    Div = A[m,m] 

在這裏,A [M,M]將不會對於m> 4,但米範圍(N)的工作將採取米至5