【问题标题】:In Sympy, what is equivalent to Mathematica's symbolic minimize function?在 Sympy 中,什么相当于 Mathematica 的符号化最小化函数?
【发布时间】:2018-12-03 13:08:45
【问题描述】:

Mathematica 有一个用于二次(可能还有其他)函数的符号求解器,例如:

Minimize[2 x^2 - y x + 5, {x}]

将产生以下解决方案:

{1/8 (40-y^2),{x->y/4}}

SymPy 或衍生库是否支持此功能?还是我必须自己实现?

非常感谢您的意见!

【问题讨论】:

  • 没有;必须使用diffsolve(或solveset)编写一些代码,并担心无穷远处的端点/行为,或使用二阶导数测试等。

标签: python sympy minimization


【解决方案1】:

我不确定这种方法的通用性,但以下代码:

import sympy
from sympy.solvers import solve

x = sympy.var('x')
y = sympy.var('y')

f = 2*x**2 - y*x + 5

r = solve(f.diff(x), x)
f = f.subs(x, r[0])

print(f)    
print(r)

输出:

-y**2/8 + 5
[y/4]

输出的第一行 (-y**2/8 + 5) 等价于 Mathematica 的 1/8 (40-y^2),只是排序不同。

第二行([y/4])类似于 Mathematica 的{x->y/4}solve 返回根列表)

我们的想法是,我们首先取fx 的偏导数,然后将其代入原始函数。

【讨论】:

  • 这种方法的通用性是有限的,例如如果函数是-(2*x**2 - y*x + 5),那么即使它现在是最大值而不是最小值,它也会给出相同的y/4。导数可能有多个零,必须将每个零的 f 值与 f 的极限进行比较,例如 x->infinity 或负无穷大(后者也可以在 SymPy 中找到)。
猜你喜欢
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
相关资源
最近更新 更多