我该如何使用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
中时,它会给出NotImplementedError,这意味着尚未实现解决它的算法(我为此打开了https://github.com/sympy/sympy/issues/10158)。Max
或Min
并解决每个迭代,然后删除Max
或Min
实际上不是其参数中最大或最小值的解决方案。expr.atoms(Max, Min)
将从expr
中提取所有Max
和Min
的实例。
expr.subs(old, new)
将返回一个新的表达式,其中expr
中的old
被替换为new
。
你的方程式没有答案。因为你已经赋值了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]
y
,但我想找到x
的值。在第一步中,为什么你把x
赋值为3
,而不是赋值为1000000
呢? - Kenenbek Arzymatovx
赋值为2/3
,从而得到正确的解。当然,如果您错误地将x
赋值为3
,则在solve(x * Max(x, 15) - 10, x)
中会得到根列表为空的结果。因为3
不是方程的根。 - Kenenbek Arzymatovx
赋了一个值(x=3
)。它怎么还是一个方程?如果不给x=3
赋值,SymPy会抱怨无法解决这个方程(NotImplemented
)。 - Darshan Chaudhary