SSOR矩阵分解法的流程计算

基本思想是将系数矩阵(有限元和有限差分中都是稀疏矩阵)A,进行分解为

A =D-L-L.T

L:A的下三角矩阵的负数。

L = \frac{(D-\omega L)D^{-\frac{1}{2}}}{\sqrt{\omega(2-\omega) }}​​​​​​​

预处理矩阵则为:

M = LL^T = \frac{(D-\omega L)D^{-1}(D-\omega L)^T}{\sqrt{\omega (2-\omega )}}{\color{Red} }

有了预处理矩阵,则SSOR分解流程如下:

1:给定初始x,w,计算r = b-Ax,Z = M^{-1}r,p初始值=z

def ssor_PCG_decompose(A,b,T):
    '''
       求Ax = b.迭代次数T,
    '''
    D = np.diag(np.diag(A))
    A_l = np.tril(-A,-1)#A的严格的下三角矩阵
    x = np.zeros(len(b),dtype=complex)#initial x
    w= 0.5
    DA_l = temp = D-w*A_l
    M = np.dot(np.dot(DA_l,np.linalg.inv(D)),DA_l.T)/np.sqrt(w*(2-w))#预处理矩阵
    M_1 = np.linalg.inv(M)   
    fai = np.zeros(T)
    r = b - np.dot(A,x)#residual
    z = np.dot(M_1,r)
    p = np.copy(z)

    for I in range(T):
        fai[i] = np.linalg.norm(r)
        Ap = np.dot(App)
        r_temp = np.dot(App)
        alpha = r_temp/np.dot(p.T,Ap)
        x = x+alpha*p
        r = r-alpha*Ap
        z = np.dot(M_1,r)
        beta = np.dot(r.T,z)/r_temp
        p = z+beta*p

return x,fai
    

对比直接使用x = A^{-1}b求解的结果和普通的共轭梯度求得的解的结果:

 可见SSOR的收敛性相较于CG较好。

但是需要注意A和M^{-1}A的谱条件数小(特征值分布值集中)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值