Python 方程求解器(最大值和最小值)
我想知道怎么用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)。
我觉得要解决这样的方程,你需要把每个 Max
或 Min
替换成它的参数,然后逐步解决每一个情况,最后再去掉那些 Max
或 Min
实际上并不是它参数中的最大值或最小值的解。
我把完整的算法留给你或者其他回答者(希望有人能在 SymPy 中实现它)。这里有一些有用的提示:
expr.atoms(Max, Min)
可以从expr
中提取出所有的Max
和Min
实例。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]