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

python上的线性代数(高斯消去法),python,linear-algebra,Python,Linear Algebra,我是python的新手,在使用python时遇到了一些问题。我收到了错误消息: 索引器错误:索引4超出大小为4的轴0的界限 我该如何纠正它 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

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

索引器错误:索引4超出大小为4的轴0的界限

我该如何纠正它

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)

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

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

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

 for i in range(m + 1, N):
    mult= A[i,m]
这里的变量i每次都将变为N(在本例中为6),但在rows索引中,A矩阵只能变为0到3

总之:

A是一个4x6矩阵 N是长度6 您正在尝试访问以下循环中的[4,m](以及[5,m]和[6,m]:

for i in range(m + 1, N):
    mult= A[i,m]
当你最多只能到达[3,m]时

编辑:

实际上,错误发生的时间比我前面提到的要早一点:

for m in range(N):
   Div = A[m,m]
这里,A[m,m]对m>4不起作用,但范围(N)中的m将需要m到5