Seite 1 von 2

Verfasst: Mittwoch 9. März 2005, 13:29
von Leonidas
netswipe hat geschrieben:Naja vielelicht funktioniert ja sowas wie

for Funktion == 0:
print x
Nein, denke ich nicht, denn Python ist nicht für sowas ausgelegt. Aber es gibt ja viele Möglichkeiten Nullstellen auszurechnen, so gibt es für Quadratische Gleichungen ja die Mitternachtsformel.

Verfasst: Mittwoch 9. März 2005, 14:11
von mawe
Hi!

Mitternachtsformel? Hab ich noch nie gehört, klingt aber lustig :) *räusper*

Also die bekannteste Methode um Nullstellen numerisch zu berechnen ist wohl das Newton'sche Näherungsverfahren. (Hier muss allerdings die erste Ableitung der Funktion bekannt sein):

Code: Alles auswählen

                           f(x(i))
x(i+1) = x(i) -  ----------
                           f'(x(i))
Man beginnt also mit einem Schätzwert, x(i).
Dann gehts so weiter:
x(i+1) = Schätzwert - Funktionswert an der Stelle x(i) / Funktionswert der ersten Ableitung an der Stelle x(i).
x(i) = x(i+1), und weiter gehts ...
Wenn x(i+1) und x(i) sich kaum mehr unterscheiden, bricht man ab, dann ist man bei der Nullstelle.

Dookie hat bei seinem Programm (soweit ich das erkennen kann) die sog. Intervallschachtelung verwendet.
Hier braucht man 2 Schätzwerte, x(0) und x(1), aber nicht die erste Ableitung.
- Man berechnet mal die Funktionswerte von x(0) und x(1), f(x(0)) und f(x(1))
- und prüft, ob eine Nullstelle dazwischen liegt: man prüft einfach ob f(x(0)) * f(x(1)) < 0.Wenn ja gehts weiter, wenn nein muss man neue Startwerte wählen.
- Das intervall zwischen x(0) und x(1) wird halbiert, dort liegt der neue Punkt x(2).
- Liegt zwischen x(1) und x(2) eine Nullstelle (also ist f(x(1)) * f(x(2)) < 0?)
- Wenn ja, wieder halbieren, usw.
- Wenn nein, dann liegt die Nullstelle zwischen x(0) und x(2), und wir machen mit diesem Intervall weiter (halbieren, ...)
Tja, das geht so lange, bis der Funktionswert beim Halbierunspunkt ungefähr bei Null liegt.

Gut, ich glaube ich hab jetzt mehr verwirrt als geholfen, aber denk Dir die Methoden mal durch, sind eigentlich ganz leicht und durchschaubar :)

PS: Mir is grad eingefallen: Statt der ersten Ableitung beim Newton, kann man auch die numerische Ableitung einsetzen, aber ich glaube das verwirrt jetzt noch mehr ...

Gruß, mawe

Verfasst: Mittwoch 9. März 2005, 14:18
von Leonidas
mawe hat geschrieben:Mitternachtsformel? Hab ich noch nie gehört, klingt aber lustig :) *räusper*
Ist eingentlich grundlegendes Lösen von sehr einfachen Gleichungen, vielleicht kennst du es ja unter dem Namen der Großen Lösungsformel oder abc-Formel. Weiteres dazu steht auch in der Wikipedia.

Verfasst: Mittwoch 9. März 2005, 14:24
von mawe
Hi Leonidas!

Ja, die Formel kenn ich natürlich, aber nicht unter dem Namen Mitternachtsformel. Wir sagen dazu ... hmmm ... Formel zum Lösen quadratischer Gleichungen :D

Gruß, mawe

Verfasst: Mittwoch 9. März 2005, 15:21
von CM
Leonidas hat geschrieben:Nein, denke ich nicht, denn Python ist nicht für sowas ausgelegt.
Nun, so will ich das nicht sehen: Python ist nicht unbedingt numerisch stabil, ja. Aber sehr gut für viele wissenschaftliche Anwendungen geeignet - darunter liegt dann manches Mal C oder Fortran Code.

PS Im Moment ist gerade eine Diskussion zur Zukunft von SciPy zugange. Bei Interesse einfach mal die Numpy-Mailingliste mitlesen.

Gruß,
Christian

Verfasst: Mittwoch 9. März 2005, 16:04
von Gast
mawe hat geschrieben:Hi Leonidas!

Ja, die Formel kenn ich natürlich, aber nicht unter dem Namen Mitternachtsformel. Wir sagen dazu ... hmmm ... Formel zum Lösen quadratischer Gleichungen :D

Gruß, mawe
^^ :D
Für mich heißt das DIng pq-Formel :D Aber ich glaub das is dann doch nen wenig Kompliziert das auf den entsprechenden Ansatz zu bringen.
Ich denke ich werd mir das newton'sche näherungsverfahren angucken. Ich kenn die zwar hab sie auch mal benutzt aber so richtig kapiert hab ich sie nie. Mal sehen... wozu gibt es mathlehrer ;)

Danke, netswipe

Verfasst: Mittwoch 9. März 2005, 16:48
von mawe
Hi!

Ich finde die "Mitternachtsformel" ist für Dich ungeeignet. Erstens ist sie numerisch nicht stabil, und Du hast ja nicht nur mit quadratischen Gleichungen zu tun, oder?
Ich denke ich werd mir das newton'sche näherungsverfahren angucken. Ich kenn die zwar hab sie auch mal benutzt aber so richtig kapiert hab ich sie nie. Mal sehen... wozu gibt es mathlehrer
Soll das etwa heissen Du kennst dich nach meiner grossartigen Beschreibung immer noch nicht aus? :D

Gruß, mawe

Verfasst: Donnerstag 10. März 2005, 13:45
von netswipe
mawe hat geschrieben: Soll das etwa heissen Du kennst dich nach meiner grossartigen Beschreibung immer noch nicht aus? :D

Gruß, mawe
Ähm doch, aber ich hab keine richtige Ahnung wie ich das pythontechnisch umsetzen soll :D War doch gut erklärt ^^
Die funktionesweise hab ich schon verstanden, aber der Code macht mir da nen bisserl Probleme. Wie lass ich z.b. python schätzen? oder dann die minimalunterschiede von 0,0000001 ignorieren? (runden?)

Grüße,
Netswipe :)

Verfasst: Donnerstag 10. März 2005, 16:51
von CM
netswipe hat geschrieben:oder dann die minimalunterschiede von 0,0000001 ignorieren? (runden?)
Nein, Runden ist in numerischen Anwendung meist keine so gute Idee. Bei iterativen Algorithmen nimmst Du am besten ein Abbruchkriterium:

Code: Alles auswählen

#pseudo code
if math.fabs(gesuchte_Zahl-errechnete_Zahl) <= Abbruchkriterium:
#oder je nach ursprünglicher Gleichung
if math.fabs((errechnete_Zahl-1)/errechnete_Zahl)) <=Abbruchkriterium
#oder sooo ...
Vielleicht solltest Du Dich doch einmal etwas mehr einlesen? Z.B. SciPy wäre was für Dich. Schau mal die Fit-Algorithmen an.

Gruß,
Christian