首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Gauss消除

Python Gauss消除
EN

Stack Overflow用户
提问于 2018-02-12 00:49:10
回答 1查看 3.4K关注 0票数 2

超级新的编程和仍然学习如何调试。每次我运行这个程序的高斯消除,我得到

“GaussElim tmp=AmaxRow IndexError中的第16行:超出范围的列表索引”

我认为这意味着代码正在超越索引的限制,但我不知道如何纠正它。任何建议都将不胜感激,谢谢!

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

发布于 2018-02-12 00:58:59

在python中,列表为零索引。如果您打印k的值,您将看到得到一个值k=5,它可能来自您的范围(i,n+1) (其中是n=5)。5x5数组只支持从0到4之间的索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48738108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档