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

5

我该如何使用python(也许是Sympy)库解决像x * max(x,15) = 10这样的方程?
max()指的是给定两个参数中的最大值。
我的方程式形式更加复杂,但我希望将其简化后解决。

3个回答

4

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

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

@RomaKarageorgievich,正如您所见,多行代码在评论中的显示效果不佳。您能否编辑您的问题,包括此问题以及您遇到的错误? - asmeurer
你知道其他不用Sympy解决这个方程的方法吗?也许可以用numpy或scipy? - Kenenbek Arzymatov

1
当我将您的方程式插入sympy.solve中时,它会给出NotImplementedError,这意味着尚未实现解决它的算法(我为此打开了https://github.com/sympy/sympy/issues/10158)。
我认为要解决这样的方程,您需要用其参数替换每个MaxMin并解决每个迭代,然后删除MaxMin实际上不是其参数中最大或最小值的解决方案。
我会把完整的算法留给你或其他回答者(或者希望有人在SymPy中实现它)。一些有用的提示:
  • expr.atoms(Max, Min)将从expr中提取所有MaxMin的实例。

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


-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]

为什么我找不到这个方程的答案?根是x = 10/15。我通过选数找到了它。但我不知道如何使用Python解决它。 - Kenenbek Arzymatov
好的,你找到了y,但我想找到x的值。在第一步中,为什么你把x赋值为3,而不是赋值为1000000呢? - Kenenbek Arzymatov
你可以一次性将x赋值为2/3,从而得到正确的解。当然,如果您错误地将x赋值为3,则在solve(x * Max(x, 15) - 10, x)中会得到根列表为空的结果。因为3不是方程的根。 - Kenenbek Arzymatov
准确地说,你现在看到自己在问题中犯了什么错误了吗? - Darshan Chaudhary
@asmeurer,OP给x赋了一个值(x=3)。它怎么还是一个方程?如果不给x=3赋值,SymPy会抱怨无法解决这个方程(NotImplemented)。 - Darshan Chaudhary
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接