csdn学院程序员的数学学习笔记--共轭梯度方法python

#共轭梯度法
import numpy as np
def conj_grad(A,b,n):
    #n = b.shape[0]
    
    xs=[]
    rs=[]
    ps=[]
    alphas=[]
    
    x0=np.random.rand(b.shape[0])
    xs.append(x0)
    
    r0=b-A.dot(x0)
    rs.append(r0)
    
    p0=r0
    ps.append(p0)
    
    alpha0=p0.dot(p0)/(p0.dot(A).dot(p0))
    alphas.append(alpha0)
    
    for i in range(n):
        r= rs[i]-alphas[i]*A.dot(ps[i])
        rs.append(r)
        beta=r.dot(r)/(rs[i].dot(rs[i]))
        
        alpha=ps[i].dot(rs[i])/(ps[i].dot(A).dot(ps[i]))
        alphas.append(alpha)
        
        x=xs[i]+alpha*ps[i]#这里为什么不用alphas[i]
        xs.append(x)
        
        p=r+beta*ps[i]
        ps.append(p)
    return xs

A=np.array([[4,1],[1,3]])
b=np.array([1,2])

np.linalg.inv(A).dot(b)#理想解

xs=conj_grad(A,b,3)
xs

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值