python sympy求多元函数的梯度、Hessian矩阵
创始人
2024-01-20 15:07:23
0

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}∂x∂f​i+∂y∂f​j​+∂z∂f​k,并不是[∂f∂x∂f∂y∂f∂z]T[\frac{\partial f}{\partial x} \frac{\partial f}{\partial y} \frac{\partial f}{\partial z}]^T[∂x∂f​∂y∂f​∂z∂f​]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}][∂x∂f​∂y∂f​∂z∂f​],和梯度向量只差了一个转置。

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)

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...