2015-11-19 15 views
5

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

4

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

@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

+0

http://stackoverflow.com/questions/33878749/python-big-piecewise-equation –

+0

Kennen Sie andere Methode zur Lösung dieser Gleichung ohne Sympy? Vielleicht mit numply oder scipy? –

-1

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

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. –

+0

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. –

+0

@RomaKarageorgievich, Ich habe die Antwort bearbeitet. –

1

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 von Max und Min von expr.

  • expr.subs(old, new) wird einen neuen Ausdruck mit old ersetzt mit new in expr zurückgeben.