【问题标题】:Linear algebra on python (gaussian elimination)python上的线性代数(高斯消元)
【发布时间】:2015-03-14 02:24:38
【问题描述】:

我是 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)

【问题讨论】:

    标签: python linear-algebra


    【解决方案1】:

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

    然后你有一个从 0 到 range(N) 的 for 循环,其中 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。

    【讨论】:

      猜你喜欢
      • 2014-01-17
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-10
      相关资源
      最近更新 更多