Seite 1 von 1

Komplexe Zahlen

Verfasst: Freitag 1. Dezember 2006, 23:06
von Samiel
Hallo alle miteinander :D

Ich habe vor ein paar Tagen angefangen Python zu lernen und hab so als Einstieg mal ein Script geschrieben, das die Nullstellen einer quadratischen Funktion berechnet.
Es funktioniert mit Hilfe der Mitternachtsformel.
Jetzt hab ich mir gedacht, dass ich ja auch irgendwie komplexe Zahlen einbauen könnte, damit ich auch Lösungen für eine negative Diskriminante erhalte, also dann per if schleife.
Ich hab gelesen, dass Python komplexe Zahlen unterstützt, ich weis blos nicht wie ich des einbauen kann, da ich da no ned so wirklich durchblick^^
Ich müsste halt irgendwie i² als -1 definieren und irgendwie erreichen, dass der dann mit i² weiterrechnet.
Ich hoffe ihr könnt mir helfen. :)

hier mal der bisherige code:

Code: Alles auswählen

#!/usr/bin/python

import math

print "nullstellenbestimmung einer quadratischen funktion der form: ax^2 + bx +c"

a = int(raw_input("bitte a angeben: "))
b = int(raw_input("bitte b angeben: "))
c = int(raw_input("bitte c angeben: "))

diskr = b * b - 4 * a * c

root = math.sqrt(diskr)

x1 = (-b + root) / (2 * a)
x2 = (-b - root) / (2* a)

print "die nullstellen liegen bei: "
print x1
print x2

Verfasst: Freitag 1. Dezember 2006, 23:18
von Joghurt
Wie wäre es damit:

Code: Alles auswählen

def mein_sqrt(x):
  if x<0:
    return complex(0,math.sqrt(-x)) # oder math.sqrt(-x)*1j
  else:
    return math.sqrt(x)
Dann dieses statt math.sqrt nutzen. (In Python wird die Ingenieurkonvention von j statt i als imaginärer Basis benutzt. (1j)*(1j) = -1. 4+2j entspricht (4+2i))

Verfasst: Freitag 1. Dezember 2006, 23:31
von BlackJack
Oder vielleicht `cmath.sqrt()`.

Verfasst: Samstag 2. Dezember 2006, 12:05
von Samiel
Ok, viele dank für die Antworten :)

Ich habs mit cmath gemacht und es funktionier :)

Code: Alles auswählen

#!/usr/bin/python

import math
import cmath

print "nullstellenbestimmung einer quadratischen funktion der form: ax^2 + bx +c"

a = int(raw_input("bitte a angeben: "))
b = int(raw_input("bitte b angeben: "))
c = int(raw_input("bitte c angeben: "))

x = b * b - 4 * a * c

if x < 0:
	root = cmath.sqrt(x)
	x1 = (-b + root) / 2 * a
	x2 = (-b - root) / 2 * a
	print "die nullstellen liegen bei: "
	print x1
	print x2

else:
	root = math.sqrt(x)
	x1 = (-b + root) / 2 * a
	x2 = (-b - root) / 2 * a
	print "die nullstellen liegen bei: "
	print x1
	print x2

Verfasst: Samstag 2. Dezember 2006, 12:58
von BlackJack
Vielleicht solltest Du das ``if``/``else`` auf die Berechnung von `root` beschränken, dann hast Du nicht soviel kopierten Quelltext.

Verfasst: Samstag 2. Dezember 2006, 13:02
von Joghurt
Völlig Wahnsinnige könnten auch

Code: Alles auswählen

root = [math, cmath][x<0].sqrt(x)
schreiben, würde dafür aber wohl (zu recht) gesteinigt werden :wink:

Verfasst: Samstag 2. Dezember 2006, 13:17
von BlackJack
Allerdings! Die beiden Module in eine Liste zu stecken ohne das die Möglichkeiten von Listen benötigt werden, gehört verboten -- die gehören gefälligst in ein Tupel. :-)

Verfasst: Samstag 2. Dezember 2006, 13:32
von Samiel
Danke für den Hinweis ;)

Ich hab etz If/Else auf die wurzelberechnung beschränkt^^
Da is der Quellcode gleich viel kürzer :)

Verfasst: Samstag 2. Dezember 2006, 13:56
von birkenfeld
Wozu überhaupt das if/else? cmath.sqrt() kann auch gut mit reellen Zahlen umgehen.

Verfasst: Samstag 2. Dezember 2006, 13:58
von Samiel
Mir is ned eingefallen wie ich des mit reellen zahlen machen könnte^^
Und da wir in Mathe mit den komplexen Zahlen angefangen hatten, hab ich mir gedacht, dass ich des ja so a mchen könnte.