首页 > 解决方案 > 高斯 Siedel 不收敛

问题描述

我编写了这段代码,它没有收敛并且运行的迭代次数比我预期的要多。我预计它会运行 17 次迭代,它会运行 24 次。我无法找出原因!

import numpy as np
from numpy import *

A = [[10, -1, 2, 0],
    [ -1, 11, -1, 3 ], 
    [ 2, -1, 10, -1 ],
    [ 0, 3, -1, 8 ] ]
b = [6, 25, -11, 15]

def GaussSiedelAccelerated(A, b, e, x, w):
  
    e = float(e)
    iterations = 0
    Epsilon = float()
    
    n = len(A)
    condition = True
    
    while condition:
        for i in range(n):
            s1 = 0
            s2 = 0 
            tempx = x.copy() # Record answer of the previous iteration
            for j in range(1,i,1):
                    s1 = s1 + x[j]*A[i][j]
            for k in range(i+1,n,1):
                    s2 = s2 + tempx[k]*A[i][k]
            x[i] = x[i]*(1-w) + w*(b[i] - s1 - s2)/A[i][i]
            
            iterations = iterations +1
            Epsilon = max(abs(x-tempx))/max(abs(x))
            print("Output vector for the run no.", iterations, "is:", x)
            print("Error for the run no.", iterations, "is:     \t", Epsilon)
            
            condition = Epsilon > e
            
    return x, Epsilon, iterations

x0 = np.zeros(len(A))
x, Epsilon, iterations = GaussSiedelAccelerated(A,b,0.0001,x0, 1.1)

标签: pythonwhile-looplinear-algebra

解决方案


推荐阅读