Komplexe Zahlen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Samiel
User
Beiträge: 6
Registriert: Freitag 1. Dezember 2006, 22:42
Kontaktdaten:

Freitag 1. Dezember 2006, 23:06

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
Ohne Wissen ist das Leben nur ein Schatten vom Tod
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Freitag 1. Dezember 2006, 23:18

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))
BlackJack

Freitag 1. Dezember 2006, 23:31

Oder vielleicht `cmath.sqrt()`.
Samiel
User
Beiträge: 6
Registriert: Freitag 1. Dezember 2006, 22:42
Kontaktdaten:

Samstag 2. Dezember 2006, 12:05

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
Ohne Wissen ist das Leben nur ein Schatten vom Tod
BlackJack

Samstag 2. Dezember 2006, 12:58

Vielleicht solltest Du das ``if``/``else`` auf die Berechnung von `root` beschränken, dann hast Du nicht soviel kopierten Quelltext.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Samstag 2. Dezember 2006, 13:02

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:
BlackJack

Samstag 2. Dezember 2006, 13:17

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. :-)
Samiel
User
Beiträge: 6
Registriert: Freitag 1. Dezember 2006, 22:42
Kontaktdaten:

Samstag 2. Dezember 2006, 13:32

Danke für den Hinweis ;)

Ich hab etz If/Else auf die wurzelberechnung beschränkt^^
Da is der Quellcode gleich viel kürzer :)
Ohne Wissen ist das Leben nur ein Schatten vom Tod
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Samstag 2. Dezember 2006, 13:56

Wozu überhaupt das if/else? cmath.sqrt() kann auch gut mit reellen Zahlen umgehen.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Samiel
User
Beiträge: 6
Registriert: Freitag 1. Dezember 2006, 22:42
Kontaktdaten:

Samstag 2. Dezember 2006, 13:58

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.
Ohne Wissen ist das Leben nur ein Schatten vom Tod
Antworten