python sympy求多元函数的梯度、Hessian矩阵

编程日常/2023/11/30 14:45:52

1 求梯度

sympy实际上提供了求梯度的方法,但个人认为不是很直观,求出的是∂f∂xi⃗+∂f∂yj⃗+∂f∂zk⃗\frac{\partial f}{\partial x} \vec {i}+\frac{\partial f}{\partial y} \vec {j}+\frac{\partial f}{\partial z}\vec {k}xfi+yfj+zfk,并不是[∂f∂x∂f∂y∂f∂z]T[\frac{\partial f}{\partial x} \frac{\partial f}{\partial y} \frac{\partial f}{\partial z}]^T[xfyfzf]T。因此,这里采取了另一种方法,用求jacobi矩阵的方法间接得到梯度。实际上当f(x,y,z)f(x,y,z)f(x,y,z)是个标量时,求出的jacobi矩阵就是[∂f∂x∂f∂y∂f∂z][\frac{\partial f}{\partial x} \frac{\partial f}{\partial y} \frac{\partial f}{\partial z}][xfyfzf],和梯度向量只差了一个转置。

import sympy as sym
x,y,z=sym.symbols('x y z')
f=sym.Matrix([x**2+sym.exp(y)+sym.log(z)])
gradient = f.jacobian([x,y,z]).T
print(gradient)

运行结果:

Matrix([[2*x], [exp(y)], [1/z]])

使用subs方法可以求出在某一点处的梯度:

print(gradient.subs([(x,1),(y,0),(z,1)])) #在x=1,y=0,z=1处的梯度值

运行结果:

Matrix([[2], [1], [1]])

2 求Hessian矩阵

from sympy import hessian
# 如果不导入hessian 就使用sympy.matrices.dense.hessian
x1,x2=sym.symbols('x1 x2')
f3=x1**2+sym.log(x2)
hessian(f3,(x1,x2)) 

运行结果:
在这里插入图片描述
同样可以用subs方法求出某一点处的hessian矩阵,即∇2f(x)\nabla^2f(x)2f(x)


https://www.daipet.cn/news/4647.html

相关文章

【JavaScript】Math对象知识全解

文章目录前言常用属性常用方法实例参考前言 除了简单的加减乘除,在某些长和开发者需要进行更为复杂的数学运算。JavaScript的Math对象提供了一系列属性和方法,能够满足大多数场合的需求。 Math对象是JavaScript的全局对象,不需要由函数进行创…

【SpringMVC】工作流程

目录 一.概念 二.组件介绍 三.SpringMVC工作流程图 四.具体流程 一.概念 在Web应用程序设计中,MVC模式已经被广泛使用。SpringMVC以DispatcherServlet为核心,负责协调和组织不同组件以完成请求处理并返回响应的工作,实现了MVC模式。那么什么是SpringMVC呢?我们首先从概…

eCal 基础安装和使用

参考文章: 自动驾驶通信中间件ecal源码分析—1. 什么是ecal 1、安装 使用官网提供的指令安装 主要参考官网进行安装, https://eclipse-ecal.github.io/ecal/index.html 主要这里兼容的主要系统: Ubuntu 18.04 Ubuntu 20.04 Ubuntu 22.04 这…

[附源码]java毕业设计8号体育用品销售及转卖系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 …

Allegro原理图反标教程

Allegro原理图反标教程 Logic→Auto Rename Refdes→Rename 点击More进行详细设置 按照下图设置 点击Rename 打开刚刚rename时生成的rename.log文件,需要提取一些数据,如下图 将上图所有带有OLD和NEW的行提取出来,再将OLD,NEW删除 打开Capture,点击Tools→Back Annota…

LeetCode链表练习(上)

文章目录前言1.反转链表1.题目分析2.代码示例2.力扣203. 移除链表元素1.题目分析2.代码示例3.力扣876. 链表的中间结点1.题目分析2.代码示例4.链表倒数第k个节点1.题目分析2.代码示例5.总结前言 之前介绍了链表的实现,为了更好巩固所学的知识,刷题是很有…

【springboot】你了解@Autowired 和 @Resource吗?@Autowired 和 @Resource深入分析

Autowired 和 Resource深入分析“认祖归宗”--Autowired 和 Resource来源“通过现象看本质”--Autowired 和 Resource作用和区别1.现象一:一个业务接口只对应一个业务实现类2.现象二:一个业务接口 对应 两个或多个业务实现类我们在开发中,一直…

【数据结构】链表其实并不难 —— 手把手带你实现双向链表

文章目录0. 前言1. 双向链表的概念2. 双向链表的实现2.1 结构设计2.2 接口总览2.3 初始化2.4 创建新节点2.5 尾插2.6 头插2.7 尾删2.8 头删2.9 查找2.10 在pos位置之前插入2.11 在pos位置删除2.12 打印2.13 销毁3. 完整代码List.hList.ctest.c4. 结语0. 前言 之前,…

【路径规划】局部路径规划算法——DWA算法(动态窗口法)|(含python实现)

文章目录参考资料1. DWA算法原理1.1 简介1.2 算法原理1. 速度采样2. 轨迹预测(轨迹推算)3. 轨迹评价2. Python实现2.1 参数配置2.2 机器人运动学模型2.3 DWA算法类实现2.4 画图2.5 主函数3. 总结参考资料 The Dynamic Window Approach to Collision Avo…

【Python百日进阶-WEB开发】Day175 - Django案例:07状态保持

文章目录五、状态保持5.1 Django中状态保持5.1.1 状态保持概述5.1.2 Cookie5.1.2.1 Cookie的用处:5.1.2.1 Cookie的特点:5.1.2.1 Cookie的操作:5.1.3 session5.1.3.1 Session的特点:5.1.3.2 Session依赖于Cookie5.1.3.3 存储方式5…