无部分旋转的高斯消去法

2024-04-19 02:36:45 发布

您现在位置:Python中文网/ 问答频道 /正文

大家晚上好

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:被零除

任何建议都将不胜感激。谢谢您!你知道吗


Tags: rm代码inforifdefrangepass