schule:nullstellen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
schule:nullstellen [2014-06-18 17:02] – [Python-Quelltext] +highlighting marco.bakera | schule:nullstellen [2016-02-25 14:56] – [Python-Quelltext] marco.bakera | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Nullstellen ====== | ||
- | |||
- | Isaac Newton hat vor über 300 Jahren ein [[wpde> | ||
- | |||
- | x³ + 2 x² - 5 x - 6 = 0 | ||
- | |||
- | Das Verfahren beginnt mit einer Schätzung und verbessert diese mit jedem Schritt ein wenig. Die erste Schätzung heißt x0, die zweite dann x1, und so weiter. Die Verbesserung x1 ergibt sich aus der Schätzung x0 wie folgt. | ||
- | |||
- | x1 = x0 - f(x0) / f´(x0) | ||
- | |||
- | In dieser Gleichung ist f(x) = x³ + 2x² -5x -6 und f´(x) die Ableitung von f(x) - also f´(x) = 3x² + 4x - 5. | ||
- | |||
- | Schaue wir uns einmal an, wie sich die Werte entwickeln, wenn wir mit der Schätzung x=5 beginnen. | ||
- | |||
- | x f(x) | ||
- | 10.0 | ||
- | 6.79 | ||
- | 5.42 | ||
- | 5.04 | ||
- | 5.0003 0.001 4.0006 | ||
- | |||
- | Man kann gut erkennen, wie sich die X-Werte langsam der 5 annähern, während die Werte von f(x) gegen 0 streben. Wir schauen, ob es nicht noch eine weitere Lösungen gibt. Immerhin haben quadratische Gleichungen ja bis zu zwei Lösungen. Wir probieren es diesmal mit dem Startwert -10. | ||
- | |||
- | x f(x) | ||
- | -10.0 165.0 -26.0 -3.65 | ||
- | -3.65 40.27 -13.31 | ||
- | -0.63 9.16 | ||
- | 0.63 | ||
- | 0.97 | ||
- | 0.99 | ||
- | |||
- | Hier erkennen wir, wie die Werte von x gegen 1 streben, während f(x) gegen 0 strebt. Einsetzen von x=1 und x=5 ergibt auch tatsächlich in beiden Fällen den Wert 0. Wir haben unsere Werte gefunden. | ||
- | |||
- | Leider funktioniert das Verfahren nicht immer. Prüfe doch einmal, was für die Gleichung f(x) = x³ - 2x + 2 und den Startwert x=0 passiert. Was kannst du feststellen? | ||
- | |||
- | Man kann das Verfahren natürlich auch mit beliebigen anderen Gleichungen durchführen. Und weil es so einfach ist, habe ich ein kleines Python-Programm geschrieben, | ||
- | |||
- | ===== Python-Quelltext ===== | ||
- | |||
- | <code python> | ||
- | |||
- | import math | ||
- | |||
- | MAX_ITERATIONEN = 100 | ||
- | GENAUIGKEIT = 0.1 | ||
- | |||
- | def newton(a, b, c, startwert): | ||
- | """ | ||
- | für einen gegebenen Startwert. | ||
- | |||
- | xn = startwert * 1.0 | ||
- | fx = 1.0 | ||
- | numIterationen = 0 | ||
- | |||
- | while abs(fx) > GENAUIGKEIT and numIterationen < MAX_ITERATIONEN: | ||
- | fx = f(a, b, c, xn) | ||
- | fx_ = f_(a,b,c, xn) | ||
- | xn = xn - fx / fx_ | ||
- | |||
- | numIterationen += 1 | ||
- | |||
- | if numIterationen >= MAX_ITERATIONEN: | ||
- | return float(' | ||
- | else: | ||
- | return xn | ||
- | |||
- | |||
- | def f(a,b,c, x): | ||
- | """ | ||
- | return a*x*x + b*x + c | ||
- | |||
- | def f_(a,b,c, x): | ||
- | """ | ||
- | return 2*a*x + b | ||
- | </ | ||
- | |||
- | Das Programm kann nun mit newton(a, | ||
- | |||
schule/nullstellen.txt · Zuletzt geändert: 2017-04-19 08:39 von 127.0.0.1