2017-08-05 8 views
2

So mit einer Gleichheit einer Gleichung Ich fange und eine Fraktion, die ich für beide x zu lösen, verwenden und y:sympy solveset FiniteSet in einem Fall zurückkehrt, sondern eine Complement in einem anderen Fall

mrs = y/x 
ratio = 2/5 
x = sympy.solveset(sympy.Eq(mrs, ratio), x) 
y = sympy.solveset(sympy.Eq(mrs, ratio), y) 

Am Ende , für y kehrt Lösung:

{2*x/5} 

, die eine FiniteSet

ist aber die Lösung für x zurückkehrt:

{5*y/2} \ {0} 

, das ein Komplement ist

ich nicht, warum für eine variable Lösung gibt mir eine FiniteSet, wenn für die andere Lösung tun nicht das gleiche? Würde es auch einen Weg geben, um die andere Variable zu lösen, um ein FiniteSet anstelle einer Ergänzung zu erhalten?

Antwort

1

Was erwarten Sie als Ergebnis? Können Sie dieses Problem von Hand lösen und die erwartete Lösung schreiben? Und warum sollten Sie ein FiniteSet als Lösung haben?

Ich selbst kann nicht mit einer besseren Notation als sympy kommen, da x=0 ausgeschlossen werden muss.

Wenn Sie weiter mit den Lösungen arbeiten, kann sympy problemlos mit FiniteSet und Complement arbeiten. Mathematisch sind das nicht völlig verschiedene Strukturen. Der Unterschied ist, dass Sympy diese Lösungen intern darstellen muss und nicht die gleiche Konstruktion für alles verwenden kann, sondern kleine Bausteine ​​verwendet, um die Lösung zu erstellen. Das Ergebnis, das Sie mit type(x) erhalten, ist der letzte verwendete Baustein.

EDIT: Einige math hier: x=0 löst nicht die Gleichung y/x=2/5 für jede y. Dies muss vom Lösungssatz ausgeschlossen werden.

Wenn Sie für y lösen, dann ist x=0 bereits ausgeschlossen, da y/0 nicht gut definiert ist.

Wenn Sie y lösen, dann ist y=0 a priori möglich, da 0/x=0 für x!=0. Daher muss sympy x=0 manuell ausschließen, was durch Entfernen von 0 aus dem Satz von Lösungen geschieht.

Nun, da wir wissen, x=0 kann nie eine Lösung der Gleichung sein, können wir es ausschließen, bevor wir versuchen, die Gleichung zu lösen. Daher tun wir

x = sympy.symbols('x', real=True, nonzero=True) 

gleich zu Beginn des Beispiels (vor der Definition von Frau). Der Rest kann unverändert bleiben.

+0

Also wirklich ich suche ein Finiteset zu bekommen, da ich weiß, wie ich auf die Antworten zugreifen kann, die ich bekomme, damit ich sie wieder in eine andere Gleichung, die ich habe, einsetzen kann. Wenn ich dieses Problem auf Papier mache, kreuze ich einfach multiplizieren, so dass ich sowohl x als auch y finden kann. Das bedeutet, dass ich nur {5 * y/2} erwartet habe und nicht das Komplement-Set-sympy gibt mir. – CcruzRamos

+0

Wirklich? Ich bekomme etwas anderes. {5 * y/2} enthält y = 0 und somit x = 0. aber die Berechnung von mrs = y/x = 0/0 ist nicht gut definiert (und insbesondere nicht 2/5), also ist wirklich y = 0, x = 0 ist keine gültige Lösung. – Hannebambel

+0

Ändern der Argumente für x hat den Trick! Vielen Dank, Kumpel !! – CcruzRamos

Verwandte Themen