经典凸优化算法(牛顿法,BFGS)的python实现

本文整理了牛顿法和BFGS两种经典凸优化算法的Python实现,适用于数模比赛的准备。算法原理不在此赘述,主要展示代码及其测试结果。牛顿法中,函数f(x) = x1^2 + x2^2 + 3*x1 + 4*x2 - 26;BFGS中,函数f(x) = 5*x1^2 + 2*x2^2 + 3*x1 - 10*x2 + 4。
摘要由CSDN通过智能技术生成

就如文章标题所示,只是简单的代码整理,用于数模比赛的准备(虽然并没有用上)
算法的数学原理请查阅前人blog

牛顿法

代码

这里我演示的函数为
f ( x ) = x 1 2 + x 2 2 + 3 ∗ x 1 + 4 ∗ x 2 − 26 f(x)=x_1^2+x_2^2+3*x_1+4*x_2-26 f(x)=x12+x22+3x1+4x226

"""
Newton法
Rosenbrock函数
函数 f(x)
梯度 g(x)
hessen 矩阵
"""
# 一阶导
def jacobian(x):
    return np.array([2*x[0]+3,2*x[1]+4])

# 二阶导
def hessian(x):
    return np.array([[2,0],[0,2]])

def newton(x0):

    print('初始点为:',x0)
    W=np.zeros((2,10**3))
    i = 1
    imax = 1000
    W[:,0] = x0 
    x = x0
    delta = 1

    while i<imax and delta>0.1:
        p = -np.dot(np.linalg.inv(hessian(x)),jacobian(x))
        print('jacobian: ',jacobian(x))
        print('hessian: ',hessian(x))
        x0 = x
        x = x + p
        W[:,i] = x
        delta = sum((x-x0))
        print('第'+
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值