高斯消除,无需部分旋转

时间:2018-12-10 04:26:59

标签: python linear-algebra numerical-analysis

晚上好,

a=[[1, 2, -1], [-2, 4, 1], [2, 2, 3]]

b=[-4,6, 1]

n=3

def SPP(): 

    for i in range(1,n):
        s=[0]*3
        p=[0]*3
        for j in range(1,n): 
            s[i]+=max(s[i], abs(a[i][j]))
        p[i]=i
    for k in range(1,n-1):
        rm=0
        for i in range(k,n): 
            r=abs(a[p[i]][k]/s[p[i]])
            if r>rm:
                rm=r
                j=1
            else:
                pass
        temp=p[k]
        p[k]=p[j]
        p[j]=temp
        for i in range(k+1,n): 
            a[p[i]][j]=a[p[i]][k]/a[p[k]][k]
            for j in range(k+1,n):
                a[p[i]][j]=a[p[i]][j]-a[p[i]][k]*a[p[k]][j]
    for k in range (1,n-1):
        for i in range(k+1,n):
            b[p[i]]=b[p[i]]-a[p[i]][k]*b[p[k]]
    for i in range(n,0,-1):
        s=b[p[i]]
        x=s/a[p[i]]
        for j in range(i+1,n): 
            s=s-a[p[i]][j]*x[j]

我正在研究Python中的高斯消除比例局部旋转问题,对于上面的大多数代码,我都遵循类给出的格式,但是我唯一不完全确定的是如何解决除以零?方向不是很清楚,所以我尝试将其放入一个空列表,但仍然出现以下错误。


ZeroDivisionError错误回溯(最近一次通话)  在()中 ----> 1个SPP()

在SPP()

---> 14             r=abs(a[p[i]][k]/s[p[i]])
     15             if r>rm:
     16                 rm=r

ZeroDivisionError:被零除

任何建议将不胜感激。谢谢!

0 个答案:

没有答案