【python】牛顿迭代法求解多元函数的最小值–以二元函数为例

目录

  1. 一元函数到多元函数的牛顿迭代法
  2. python代码实现过程

一元函数到多元函数的牛顿迭代法

参考 多元函数的牛顿迭代和高斯牛顿法怎么推导?

一元函数的牛顿迭代公式:

【python】牛顿迭代法求解多元函数的最小值--以二元函数为例
多元函数的牛顿迭代公式:
【python】牛顿迭代法求解多元函数的最小值--以二元函数为例
其中Hession矩阵为:
【python】牛顿迭代法求解多元函数的最小值--以二元函数为例

; python代码实现过程

  • 计算梯度函数
    使用了sympy库的diff函数计算导数,再代入具体数值进行计算,返回X处的梯度grad

def get_grad(f, X):

    f1 = diff(f, x1)
    f2 = diff(f, x2)

    grad = np.array([[f1.subs([(x1, X[0]), (x2, X[1])])],
                   [f2.subs([(x1, X[0]), (x2, X[1])])]])
    return grad
  • 计算Hession矩阵函数
    同样使用diff函数计算二次偏导,组成Hession矩阵(里面的括号、中括号要盯对清楚)

def get_hess(f, X):

    f1 = diff(f, x1)
    f2 = diff(f, x2)
    f11 = diff(f,x1,2)
    f22 = diff(f,x2,2)
    f12 = diff(f1,x2)
    f21 = diff(f2,x1)

    hess = np.array([[f11.subs([(x1,X[0]), (x2,X[1])]),
                        f12.subs([(x1,X[0]), (x2,X[1])])],

                        [f21.subs([(x1,X[0]), (x2,X[1])]),
                        f22.subs([(x1,X[0]), (x2,X[1])])]])

    hess = np.array(hess, dtype = 'float')
    return hess
  • 牛顿迭代过程
    迭代公式里使用的是Hession矩阵的逆,所以还要求个逆

def newton_iter(X0, err):

    count = 0
    X1 = np.array([[0],[0]])
    while True:

        X2 = X0 - X1
        if sqrt(X2[0]**2 + X2[1]**2)  err:
            break
        else:
            hess = get_hess(f, X0)

            hess_inv = np.linalg.inv(hess)
            grad = get_grad(f, X0)
            X1 = X0

            X0 = X1 - np.dot(hess_inv, grad)
            count += 1
            print('第',count,'次迭代:','x1=',X0[0],'x2=',X0[1])
    print('迭代次数为:',count)
    print('迭代结果为',X0)

全部代码如下

请使用1.4版本的sympy

from sympy import *
import numpy as np

x1,x2 = symbols('x1, x2')

f = 60 - 10*x1 - 4*x2 + x1**2 + x2**2 - x1*x2

def get_grad(f, X):

    f1 = diff(f, x1)
    f2 = diff(f, x2)

    grad = np.array([[f1.subs([(x1, X[0]), (x2, X[1])])],
                   [f2.subs([(x1, X[0]), (x2, X[1])])]])
    return grad

def get_hess(f, X):

    f1 = diff(f, x1)
    f2 = diff(f, x2)
    f11 = diff(f,x1,2)
    f22 = diff(f,x2,2)
    f12 = diff(f1,x2)
    f21 = diff(f2,x1)

    hess = np.array([[f11.subs([(x1,X[0]), (x2,X[1])]),
                        f12.subs([(x1,X[0]), (x2,X[1])])],

                        [f21.subs([(x1,X[0]), (x2,X[1])]),
                        f22.subs([(x1,X[0]), (x2,X[1])])]])

    hess = np.array(hess, dtype = 'float')
    return hess

def newton_iter(X0, err):

    count = 0
    X1 = np.array([[0],[0]])
    while True:

        X2 = X0 - X1
        if sqrt(X2[0]**2 + X2[1]**2)  err:
            break
        else:
            hess = get_hess(f, X0)

            hess_inv = np.linalg.inv(hess)
            grad = get_grad(f, X0)
            X1 = X0

            X0 = X1 - np.dot(hess_inv, grad)
            count += 1
            print('第',count,'次迭代:','x1=',X0[0],'x2=',X0[1])
    print('迭代次数为:',count)
    print('迭代结果为',X0)

X0 = np.array([[1],[1]])
err = 1e-10
newton_iter(X0, err)

Original: https://blog.csdn.net/qq_45726331/article/details/115804812
Author: 空空7
Title: 【python】牛顿迭代法求解多元函数的最小值–以二元函数为例

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/694508/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 数据分析pandas

    (一)Series (1)结构 主要由一组数据与之相关的索引两部分构成。(索引在左,数据在右) (2)多种构造代码方法: 1 . class pandas.Series( data…

    人工智能 2023年7月17日
    045
  • 【机器学习】数据增强(Data Augmentation)

    文章目录 一、引言 – 背景 二、为什么需要数据增强? 三、什么是数据增强? * 定义 分类 四、有监督的数据增强 * 1. 单样本数据增强 – (1)几何…

    人工智能 2023年6月22日
    061
  • 基于MobileNet-Yolov4搭建轻量化目标检测

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    人工智能 2023年7月9日
    072
  • CloneNotSupportedException的解决方案 + Object的clone方法分析

    主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学…

    人工智能 2023年6月26日
    097
  • C#绘图工具

    一、整体思路 1、界面 2、功能 3、数据的传递 Tools和主窗体之间的数据传递: Tools内部的数据传递: 二、具体实现 窗体功能代码 Form1.cs SetSize.cs…

    人工智能 2023年6月18日
    087
  • 字符串离散化+数据合并(join&merge)+数据分组聚合(groupby)+索引(行索引index+列索引set_index+复合索引[series和dataframe])

    整体框架 目录 整体框架 一、字符串离散化——one-hot特征工程 二、合并 通过join按照index进行合并 通过merge按照列进行合并 1、内连接 2、外连接,取并集 3…

    人工智能 2023年7月8日
    046
  • python—数据分析(二)

    Series和DataFrame中数据的基本功能: reindex方法是创建一个新对象,其数据对Series和DataFrame的新索引,它们的主要区别在DataFrame可以对i…

    人工智能 2023年7月8日
    051
  • 详解电容类型

    这是瓷介电容器(CC),又分1类(NPO、CCG);2类(X7R、2X1)和3类(Y5V、2F4) 涤纶电容器(CL),常用的型号有CL11、CL21等系列 聚苯乙烯电容器(CB)…

    人工智能 2023年6月4日
    064
  • 如何在Seaborn柱形图顶端添加数字——以奥运数据分析为例

    如何在Seaborn柱形图顶端添加数字——以奥运数据分析为例 1.问题的提出 之前暑期在家,闲着没事干的时候想写点基础的代码巩固下自己python知识,于是就上Kaggle下了一套…

    人工智能 2023年7月16日
    096
  • 知识图谱补全(KGC)的常用方法

    构建知识图谱最为核心的一步就是知识抽取,但是知识抽取只能初步构建出图谱,要想得到内容比较准确的图数据库,还需要非常重要的一步,就是知识图谱的补全。 知识图谱补全主要有以下几种方法:…

    人工智能 2023年7月27日
    040
  • 35、T5L 迪文屏C51开发之音频播放

    T5L 迪文屏C51开发之音频播放 1、介绍 2、例程功能简介 3、GUI界面设计 3、C51程序设计 1、介绍 在T5L芯片中集成了一个音频管理模块,利用此音频模块我们可以实现播…

    人工智能 2023年5月27日
    0100
  • 如何将pytorch模型部署到安卓

    如何将pytorch模型部署到安卓上 这篇文章演示如何将训练好的pytorch模型部署到安卓设备上。我也是刚开始学安卓,代码写的简单。 环境: pytorch版本:1.10.0 模…

    人工智能 2023年7月21日
    049
  • 【Anaconda的安装和使用】

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

    人工智能 2023年5月25日
    062
  • 3.SPSS Modeler数据基本分析笔记

    3.1数据基本分析(实验) 任务介绍: 本小节实训我们要练习 SPSS Modeler当中的 数据基本分析部分。Modeler数据基本分析包括5大块内容: 1.数据质量分析 2.描…

    人工智能 2023年6月19日
    088
  • 使用ResNet-50实现图像分类任务

    摘要: 承接上一篇LeNet网络模型的图像分类实践,本次我们再来认识一个新的网络模型:ResNet-50。不同网络模型之间的主要区别是神经网络层的深度和层与层之间的连接方式,正文内…

    人工智能 2023年6月16日
    091
  • 让AI玩《我的世界》

    文章目录 VPT模型 论文细节 * 预训练阶段 下游微调 数据扩展 下游微调+强化学习 我们都知道,《我的世界》(MC)是一款 沙盒开放世界游戏,玩家可以根据自己的想象,建造出完全…

    人工智能 2023年5月27日
    082
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球