Python 方程求解器(最大值和最小值)



如何像使用 python(可能是 Sympy(库x * max(x,15) = 10一样解析方程?
max() 表示给定两个参数之间的最大值。
我的方程有一个更复杂的形式,但我想用简化的形式解决它。

如果您将Max转换为Piecewise,SymPy 似乎可以解决这个方程。

In [4]: solve(x*Piecewise((x, x >=15), (15, x < 15)) - 10, x)
Out[4]: [2/3]

当我将您的方程代入sympy.solve时,它给出了 NotImplementError,这意味着解决它的算法没有实现(我为此打开了 https://github.com/sympy/sympy/issues/10158(。

我认为要解决这样的方程,您需要将每个MaxMin替换为其参数并求解每次迭代,然后删除MaxMin实际上不是最大值或最小值的解决方案。

我将把完整的算法留给你或其他一些回答者(或者希望有人会在 SymPy 中实现它(。一些有用的提示:

  • expr.atoms(Max, Min)将从expr中提取MaxMin的所有实例。

  • expr.subs(old, new) 将返回一个新表达式,其中 old 替换为 new expr

你的方程式没有答案。您正在分配x=3,因此没有要求解的变量。

x
3
Max(x, 15)
15
solve(x*Max(x, 15)-10, x) #No variable here
[]

也许,你的意思是这样做: y*Max(x, 15) = 10

然后它成为一个有效的问题。

In [1]: solve(y*Max(x, 15)-10, y)
Out[1]: [2/3]

最新更新