Исключение Python Gauss
Супер новичок в программировании и все еще учусь отлаживать. Каждый раз, когда я запускаю эту программу для устранения Гаусса, я получаю
"строка 16, в GaussElim tmp=A[maxRow][k] IndexError: список индексов вне диапазона"
Я думаю, это означает, что код перешагнул через предел индекса, но я не уверен, как это исправить. Любой совет будет высоко ценится спасибо!
def GaussElim(A):
n=len(A)
for i in range(0,n): #search for maximum in this column
maxE1=abs(A[i][i])
maxRow=i
for k in range(i+1,n):
if abs(A[k][i])>maxE1:
maxE1=abs(A[k][i])
maxRow=k
# swap maximum row with current row (column by column)
for k in range(i,n+1):
tmp=A[maxRow][k]
A[maxRow][k]=A[i][k]
A[i][k]=tmp
for k in range(i+1,n):
c=-A[k][i]/A[i][i]
for j in range(i,n+1):
if i==j:
A[k][j]=0
else:
A[k][j]+=c*A[i][j]
#solve equation Ax+b for an upper triangular matrix A
x=[0 for i in range(n)]
for i in range(n-1,-1,-1):
x[i]=A[i][n]/A[i][i]
for k in range(i-1,-1,-1):
A[k][n]-=A[k][i]*x[i]
return x
def main():
A=[[2,7,3,6,2],
[3,3,4,4,6],
[6,9,5,3,3],
[6,9,5,3,3],
[4,2,1,7,5]]
mysum1 = GaussElim(A)
print('a) GaussElimination Solution = {:.1f}'.format(mysum1))
1 ответ
В python списки индексируются с нуля. Если вы напечатаете значение k, вы увидите, что вы получаете значение k=5, которое предположительно исходит из вашего диапазона (i, n+1) (где n=5). Ваш массив 5x5 будет поддерживать индексирование только от 0 до 4.