python 上的线性代数(高斯消元法)
Linear algebra on python (gaussian elimination)
我是 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)
在我看来你有一个大小为 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),但是您的 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,但 m in range(N) 将 m 取到 5。
我是 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)
在我看来你有一个大小为 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),但是您的 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,但 m in range(N) 将 m 取到 5。