首页 > 解决方案 > SymPy 的多元最小值

问题描述

我知道如何用 SymPy 象征性地找到函数的最小值:

from sympy import Symbol, sin, maximum
x = Symbol('x')

maximum(sin(x)*cos(x),x) # output 1/2

如果我想对多元函数做同样的事情怎么办?以下代码不起作用

from sympy import Symbol, sin, maximum
x,y= Symbol("x","y")

maximum(sin(x)*cos(y),x,y) 

我没有在 SymPy 文档中找到这样做的好方法。然而 SymPy 能够区分多元函数,因此他也可以象征性地找到最小值或至少一些候选者(其中梯度为空)

任何人都知道如何做到这一点?

提前致谢

标签: pythonsympy

解决方案


一个快速版本可能是:

In [7]: f = sin(x)*cos(y)

In [8]: stationary_points = solve([f.diff(x), f.diff(y)], [x, y], dict=True)

In [9]: [f.subs(p) for p in stationary_points]
Out[9]: [0, 0, 1, -1, 0, 0, -1, 1]

In [10]: max(_)
Out[10]: 1

推荐阅读