Wie kann ich die Gleichung wie x * max(x,15) = 10
mit Python (vielleicht Sympy) Bibliotheken auflösen?
Die max()
bedeutet das Maximum zwischen zwei gegebenen Argumente.
Meine Gleichungen haben eine kompliziertere Form, aber ich möchte es in vereinfachter Form auflösen.Python Gleichung Löser (max und min)
Antwort
Es sieht aus wie SymPy diese Gleichung lösen kann, wenn man die Max
zu einem Piecewise
konvertieren.
In [4]: solve(x*Piecewise((x, x >=15), (15, x < 15)) - 10, x)
Out[4]: [2/3]
Es gibt keine Antwort auf Ihre Gleichung. Sie weisen x=3
zu, daher gibt es keine Variable, die gelöst werden muss.
x
3
Max(x, 15)
15
solve(x*Max(x, 15)-10, x) #No variable here
[]
Vielleicht, meint man, dies zu tun: y*Max(x, 15) = 10
Dann wird es eine berechtigte Frage.
In [1]: solve(y*Max(x, 15)-10, y)
Out[1]: [2/3]
Warum habe ich keine Antwort auf diese Gleichung? Die Wurzel ist x = 10/15. Ich habe es durch Auswahlnummern gefunden. Aber ich weiß nicht, wie ich es mit Python lösen kann. –
Dies liegt daran, dass 'x' den Wert 3 hat. Also ist' x * Max (x, 15) -10' ein skalarer Wert, für den es keine Variable zu lösen gibt. –
@RomaKarageorgievich, Ich habe die Antwort bearbeitet. –
Wenn ich Ihre Gleichung in sympy.solve
stecken, es NotImplementedError gibt, die Algorithmen, was bedeutet, es zu lösen sind nicht implementiert (geöffnet ich https://github.com/sympy/sympy/issues/10158 für diese).
Ich denke Gleichungen wie diese zu lösen, würden Sie jeden Max
oder Min
mit seinen Argumenten ersetzen müssen und jede Iteration zu lösen, und dann die Lösungen entfernen, wo die Max
oder Min
war nicht wirklich maximal oder minimal in ihrem Argument.
Ich überlasse den vollständigen Algorithmus Ihnen oder einem anderen Beantworter (oder hoffentlich wird jemand es in SymPy implementieren). Einige nützliche Tipps:
expr.atoms(Max, Min)
wird extrahieren Sie alle Instanzen vonMax
undMin
vonexpr
.expr.subs(old, new)
wird einen neuen Ausdruck mitold
ersetzt mitnew
inexpr
zurückgeben.
@RomaKarageorgievich wie Sie sehen können, funktioniert mehrzeiliger Code nicht so gut in einem Kommentar. Können Sie Ihre Frage so bearbeiten, dass sie diese enthält, und den Fehler, den Sie bekommen? – asmeurer
http://stackoverflow.com/questions/33878749/python-big-piecewise-equation –
Kennen Sie andere Methode zur Lösung dieser Gleichung ohne Sympy? Vielleicht mit numply oder scipy? –