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

5 投票
3 回答
2885 浏览
提问于 2025-05-10 15:24

我想知道怎么用Python(可能是用Sympy这个库)来解决一个方程,比如 x * max(x,15) = 10
这里的 max() 是指在给定的两个数中取最大的那个。
我的方程其实更复杂,但我想先用简单的形式来解决它。

相关文章:

  • 暂无相关问题
暂无标签

3 个回答

-1

你的方程式没有答案。你把 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]
1

当我把你的方程放进 sympy.solve 时,它给了我一个 NotImplementedError,这意味着解决这个方程的算法还没有实现(我查看了这个链接 https://github.com/sympy/sympy/issues/10158)。

我觉得要解决这样的方程,你需要把每个 MaxMin 替换成它的参数,然后逐步解决每一个情况,最后再去掉那些 MaxMin 实际上并不是它参数中的最大值或最小值的解。

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

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

  • expr.subs(old, new) 会返回一个新的表达式,其中 old 被替换成 new

4

看起来,如果你把 Max 转换成 Piecewise,SymPy 就能解决这个方程。

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

撰写回答