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

时间:2015-11-19 12:19:09

标签: python sympy equation

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

3 个答案:

答案 0 :(得分:4)

如果您将Max转换为Piecewise,SymPy可以解决此等式。

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

答案 1 :(得分:1)

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

我认为要解决这些方程式,您需要用其参数替换每个MaxMin并解决每次迭代,然后删除Max或{ {1}}在其参数中实际上不是最大值或最小值。

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

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

  • expr将在expr.subs(old, new)中返回old替换为new的新表达式。

答案 2 :(得分:-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]