Kurvendiskussionen, dafür Funktionen zerlegen

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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 9. März 2005, 13:29

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Mittwoch 9. März 2005, 14:11

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 9. März 2005, 14:18

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Mittwoch 9. März 2005, 14:24

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
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Mittwoch 9. März 2005, 15:21

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
Gast

Beitragvon Gast » Mittwoch 9. März 2005, 16:04

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Mittwoch 9. März 2005, 16:48

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
Benutzeravatar
netswipe
User
Beiträge: 12
Registriert: Sonntag 6. März 2005, 20:12
Wohnort: Edermünde
Kontaktdaten:

Beitragvon netswipe » Donnerstag 10. März 2005, 13:45

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 :)
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Donnerstag 10. März 2005, 16:51

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]