数值优化——牛顿法

机器学习之牛顿法

原理

泰勒公式

f(x)=n=0f(n)(x0)×1n!(xx0)n

假设函数 f(x) 二次可微,则二次泰勒展开:

f(x)g(x)=f(xk)+f(xk)(xxk)+12f′′(xk)(xxk)2

求函数 f(x) 极值可转化为求导函数为0,对 g(x) 求导并令其为0

f(xk)+f′′(xk)(xxk)=0

xk+1=xkf(xk)f′′(xk)

由此得到迭代公式, xk+1 不断逼近极值,直到某一次导数小于某误差

步骤

  1. 确定初始点 x0 ,确定误差大小 e
  2. 计算f(xk),若它的绝对值小于 e 则停止迭代,xk即为极值点
  3. 计算 f′′(xk) ,并根据迭代公式求得 xk+1
  4. 跳转至步骤2

代码实现

这里使用的函数: x3+2x2+3x+4

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

def h(x):
    return x * x * x + 2 * x * x + 3 * x + 4


def h1(x):
    return 3 * x * x + 4 * x + 3


def h2(x):
    return 6 * x + 4


if __name__ == "__main__":
    # x的初始值
    x_k = 0
    # 误差大小
    e = 0.0001
    k = 1
    y = 0
    # 迭代次数
    times = 10000

    while k < times:
        y = h(x_k)
        # 计算f'
        y1 = h1(x_k)
        if abs(y1) <= e:
            break
        # 计算f''
        y2 = h2(x_k)
        x_k -= y1 / y2
        k += 1
    print("k = ", k)
    print("x = ", x_k)
    print("y = ", y)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值