python上的线性代数(高斯消除)

时间:2015-03-13 16:07:26

标签: python linear-algebra

我是python的新手,我在使用python工作Gaussian elimination时遇到了一些问题。我收到了错误消息:

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)

1 个答案:

答案 0 :(得分:0)

在我看来,你有一个大小为4x6的矩阵,这意味着你的数组每个维度的索引分别从0到3和0到5。

然后你有一个for循环从0到范围(N),其中N是6个元素数组的长度。这是以m作为迭代器的循环。

最后,你有(我假设的意思是)一个从m + 1到N的内部循环,你在A中使用该索引作为行:

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

这里的变量i每次都会转到N(在这种情况下是6),但是你的A矩阵只能在行索引中去0到3。

总结:

A是4x6矩阵 N是长度6 你试图在以下循环中访问A [4,m](以及A [5,m]和A [6,m]:

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

当你最多只能达到A [3,m]。

编辑:

实际上,错误比我之前提到的要早一点:

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

这里,A [m,m]不适用于m> 4,但是在范围(N)中的m将取m到5。