Hallo an alle,
ich möchte Gleichungen lösen.
Dabei möchte ich bei den Ergebnissen zwischen reelen und komplexen Zahlen unterscheiden.
Bei x = 2I ist der type <class 'sympy.core.mul.Mul'> Multiplikative Verknüpfung ??
bei x = I ist der type <class 'sympy.core.numbers.ImaginaryUnit'>
Kann man nicht type(x) == complex fragen?
Ich habe das Problem bis jetzt so gelöst:
#Nullstellen ausgeben
if len(x_0)==0:
print('keine Nullstellen.')
else:
print('Nullstellen')
z=1
for i in x_0:
if type(i)==Mul or i==I :
print(' x'+str(z),' = ',i,' , ist keine reele Lösung')
z+=1
else:
print(' x'+str(z),' = ',i)
z+=1
Geht das auch eleganter ?
Danke für eure Hilfe.
Datentyperkennung beim Lösen von Gleichungen
Hallo,
Grüße
Dennis
Mir würde `isinstance` einfallen:
Code: Alles auswählen
>>>isinstance(2j, complex)
True
>>>isinstance(2.3, complex)
False
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Hallo Dennis,
das funktioniert bei mir leider nicht.
Hier ein Beispiel
Ausgabe:
Das komplexe Ergebnis wird nicht mit j sondern mit I ausgegeben.
Grüße Tilo
das funktioniert bei mir leider nicht.
Hier ein Beispiel
Code: Alles auswählen
from sympy import *
x=symbols('x')
fx = x**2+1
print('f(x) = ',expand(fx))
#Nullsellen der Funktion und der Ableitungen finden
x_0=solve(fx,x) #Nullstellen
print(x_0)
for i in x_0:
print(i, isinstance(i, complex))
if isinstance(i, complex):
print(i,' ist keine reele Lösung')
else:
print(' x = ',i)
Code: Alles auswählen
f(x) = x**2 + 1
[-I, I]
-I False
x = -I
I False
x = I
Grüße Tilo
Wenn Du wissen willst, ob eine Lösung reell ist, dann gibt es dafür `is_real`.
Variablennamen sind für das Verständnis wichtig. Vor allem wenn Du Dich eh im mathematischen Umfeld bewegst, weißt Du, daß `i` für eine ganze Zahl steht. Wenn etwas sowohl im if- als auch im else-Zweig steht, kann man es auch einfach einmal danach schreiben. Jedoch, wenn man einen Zählerstand bei for-Schleife braucht, benutzt man enumerate.
Variablennamen sind für das Verständnis wichtig. Vor allem wenn Du Dich eh im mathematischen Umfeld bewegst, weißt Du, daß `i` für eine ganze Zahl steht. Wenn etwas sowohl im if- als auch im else-Zweig steht, kann man es auch einfach einmal danach schreiben. Jedoch, wenn man einen Zählerstand bei for-Schleife braucht, benutzt man enumerate.
Code: Alles auswählen
if len(solutions)==0:
print('keine Nullstellen.')
else:
print('Nullstellen')
for i, solution in enumerate(solutions, 1):
if solution.is_real:
print(f" x{i} = {solution}")
else:
print(f" x{i} = {solution} ist keine reele Lösung")