Seite 1 von 1
Datentyperkennung beim Lösen von Gleichungen
Verfasst: Samstag 14. Dezember 2024, 16:42
von botil02
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.
Re: Datentyperkennung beim Lösen von Gleichungen
Verfasst: Sonntag 15. Dezember 2024, 09:32
von Dennis89
Hallo,
botil02 hat geschrieben: ↑Samstag 14. Dezember 2024, 16:42
Kann man nicht type(x) == complex fragen?
Mir würde `isinstance` einfallen:
Code: Alles auswählen
>>>isinstance(2j, complex)
True
>>>isinstance(2.3, complex)
False
Grüße
Dennis
Re: Datentyperkennung beim Lösen von Gleichungen
Verfasst: Sonntag 15. Dezember 2024, 09:33
von botil02
Danke, werde ich gleich ausprobieren.
Re: Datentyperkennung beim Lösen von Gleichungen
Verfasst: Sonntag 15. Dezember 2024, 10:00
von botil02
Hallo Dennis,
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)
Ausgabe:
Das komplexe Ergebnis wird nicht mit
j sondern mit
I ausgegeben.
Grüße Tilo
Re: Datentyperkennung beim Lösen von Gleichungen
Verfasst: Sonntag 15. Dezember 2024, 10:04
von Sirius3
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.
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")
Re: Datentyperkennung beim Lösen von Gleichungen
Verfasst: Sonntag 15. Dezember 2024, 10:39
von botil02
Hallo Sirius3,
das hat mir sehr geholfen und gezeigt, dass man immer immer wieder dazulernen kann.
Danke und viele Grüße
Tilo