美文网首页
牛顿法python3实现

牛顿法python3实现

作者: Andrew_jidw | 来源:发表于2020-03-06 17:06 被阅读0次

本文参考链接:牛顿法实现
偏导数求解

import numpy as np
from sympy import *


#获取变量
def get_vars(*args):
    arg_str = ''
    i=0
    for arg in args:
        i += 1
        if i < len(args):
            arg_str += arg +  ','
        else:
            arg_str += arg
    return arg_str

#获取hessian矩阵
def get_hessian(a,b):
    hessian = zeros(2, 2)  
    for i,fi in enumerate(f):
        for j,r in enumerate(vars):
            for k, s in enumerate(vars):
                hessian[j,k] = diff(diff(fi, r),s).subs({vars[0]:a, vars[1]:b})
    return hessian

#牛顿法迭代
def newton(max_step, x_init):
    i = 1
    while i < max_step:
        if i == 1: 
            #第一次迭代
            grandient = np.array([diff(f1,vars[0]).subs({vars[0]:x_init[0], vars[1]:x_init[1]}), 
                                 diff(f1,vars[1]).subs({vars[0]:x_init[0], vars[1]:x_init[1]})]) 
            hessian = get_hessian(x_init[0], x_init[1])
            #此处需要对hessian进行求逆,需要先将其转为类型为float的矩阵再进行求解,否则可能报错
            new_ab = x_init - np.matmul(np.linalg.inv(np.mat(hessian,dtype='float')), grandient)
        else: 
            grandient = np.array([diff(f1,vars[0]).subs({vars[0]:new_ab[0,0], vars[1]:new_ab[0,1]}), 
                             diff(f1,vars[1]).subs({vars[0]:new_ab[0,0], vars[1]:new_ab[0,1]})])
            hessian = get_hessian(new_ab[0,0], new_ab[0,1])
            new_ab = np.array(new_ab - np.matmul(np.linalg.inv(np.mat(hessian,dtype='float')), grandient))
        print('迭代第%d次:%.5f %.5f' %(i, new_ab[0,0], new_ab[0,1]))
        i = i + 1
    return new_ab

var = get_vars('a', 'b')
vars = symbols(var)
f1 = vars[0]**4 + vars[1]**4 + vars[0]*vars[1]
f = sympify([str(f1)])
x_init = np.array([30,30])
max_step = 30
newton(max_step, x_init)

输出结果


函数图像

从输出结果可以看出最终收敛至(0,0),即f在(0,0)处取得极小值。

相关文章

  • 牛顿法python3实现

    本文参考链接:牛顿法实现偏导数求解 输出结果 从输出结果可以看出最终收敛至(0,0),即f在(0,0)处取得极小值。

  • 梯度优化算法

    梯度下降,共轭梯度法;牛顿法,拟牛顿法;信赖域方法,罚函数法。

  • 牛顿法和最速下降法的Python实现

    1 牛顿法 1.1 牛顿法的Python程序 1.2 牛顿法的结果分析     程序执行的结果如下:     经过...

  • 牛顿法、拟牛顿法

    摘抄:https://blog.csdn.net/lilong117194/article/details/781...

  • 牛顿法、拟牛顿法

    牛顿法: 根据二阶泰勒展开,用一阶和二阶倒数确定参数迭代步长和方向 设初始向量,它在处的泰勒展开如下: ,当时 注...

  • 无约束条件的参数优化(2)--牛顿法

    一、牛顿法 在介绍牛顿法之前,先回顾下在数学分析中,对于牛顿法的解释。 在高数中,牛顿法适中估值方法,用于近似计算...

  • Newton's method and Quasi Ne

    Welcome To My Blog 牛顿法和拟牛顿法是求解无约束最优化问题的常用方法,优点是收敛速度快.牛顿法...

  • 局部搜索之牛顿法

    除了前面说的梯度下降法,牛顿法也是机器学习中用的比较多的一种优化算法。 牛顿法求方程解 牛顿法又称为牛顿-拉弗森方...

  • 深度学习笔记—模型优化

    [问题] 深度模型中的优化问题部分 1.牛顿法 神经网络中最广泛使用的二阶方法:牛顿法 牛顿法解决了哪些问题? 二...

  • 牛顿法

    如果要求解一个数的根,用什么方法比较好呢?我之前看到有人问这个问题,据说是谷歌的一道面试题,标准面试答案是使用二分...

网友评论

      本文标题:牛顿法python3实现

      本文链接:https://www.haomeiwen.com/subject/pokwrhtx.html