第十五课 双共轭梯度处理
采取预处理的原因在上一篇中已经介绍预处理共轭梯度
此篇预处理在第十三课稳定双共轭梯度的基础上
算例采用之前的
详细计算过程可见高斯消元解方程
左手边预处理
#线性联立方程的双共轭梯度法(左手边预处理)
import numpy as np
import math
import B
n=3
converged=np.array([False])
precon=np.zeros((n,1))
v=np.zeros((n,1))
r=np.zeros((n,1))
r0_hat=np.zeros((n,1))
p=np.zeros((n,1))
s=np.zeros((n,1))
t=np.zeros((n,1))
#xnew=np.zeros((n,1))
a=np.array([[10,1,-5],[-20,3,20],[5,3,5]],dtype=np.float)
b=np.array([[1],[2],[6]],dtype=np.float)
x=np.array([[1],[1],[1]],dtype=np.float)
tol=1.0e-5
limit=100
print('系数矩阵')
print(a[:])
print('右手边向量',b[:,0])
print('初始猜测值',x[:,0])
#简单主对角线预处理
for i in range(1,n+1):
precon[i-1,0]=1.0/a[i-1,i-1]
for