python 共轭梯度下降

import numpy as np
import matplotlib.pyplot as plt

# initial point x0
x0 = np.zeros((4,1))

# positive symmetric matrix H
H = np.array([[150, 20, 90, 101],
           [20, 36, 46, 61],
           [90, 46, 306, 156],
           [101, 61, 156, 245]])

# vector g
g = np.array([8, -5, 1, 6]).reshape(-1, 1)

def f(x):
    return 1/2*np.dot(np.dot(x.T,H),x)
y_data=np.zeros((7,1))

# x←x0
x = x0
# compute the gradient eta
eta = np.dot(H, x)-g
d = -eta
i = 0

epsilon = 1e-4

while not np.linalg.norm(eta, ord=2) <= epsilon:
    i = i+1
    print("iter=", i)
    # compute alpha
    alpha = -(np.dot(eta.T, d)/np.dot(np.dot(d.T, H), d))
    print("alpha:", alpha)
    x = x+alpha*d
    print("x=", x)
    # renew the gradient-更新梯度
    eta = np.dot(H, x)-g
    print("eta=", eta)
    # renew the descent direction-更新下降方向
    d = -eta+(np.dot(np.dot(eta.T, H), d)/np.dot(np.dot(d.T, H), d))*d
    print("d=", d)

print("x=", x)



 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值