python - 高斯 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)
解决方案
推荐阅读
- arrays - 如何在 Symfony 中使用 foreach 循环从对象中获取数据?
- java - 递归地修改使用给定注释注释的对象中的所有字段
- java - 如何关联Android Studio中RelativeLayout的两个视图?
- tortoisehg - 在修订历史视图中包含“工作目录”伪修订
- r - 从邻域名称中获取纬度/经度
- android - 有没有办法直接从 GLSurfaceView(OpenGL ES) 创建视频文件?
- heroku - heroku 部署的应用程序不安全
- java - Java中两个日期之间的周数
- python - 在列表列表中逐项操作
- c++ - 用于 std::list 的 C++11 基于范围的 for 循环