Newtonverfahren

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
peter.pan
User
Beiträge: 10
Registriert: Dienstag 14. Februar 2017, 11:29

Newtonverfahren

Beitragvon peter.pan » Dienstag 14. Februar 2017, 11:36

Liebe Foren-Mitglieder,

ich bringe mir gerade Python bei und wollte auf diesem Weg hier eine Frage zum Newtonverfahren stellen, genauer: Wenn ich zwei Funktionen definiert habe, wir kann ich einen Startwert in der For-Schleife waehlen?
Dazu poste ich euch nochmal meinen code:

  1. import numpy as np
  2. import matplotlib.patches as mpatches
  3. import matplotlib.pyplot as plt
  4.  
  5. def f(x):
  6.     return 2*x + 4*x**2 - 3*x**3 - 1
  7.  
  8. def df(x):
  9.     return 2 + 8*x - 9*x**2
  10.  
  11. x1 = np.arange(-10,10,0.1)
  12.  
  13. n=50
  14. x[1]=2
  15. for i in range(1,n):
  16.     x[i+1]=x[i] + f(x)/df(x)
  17.     if df(x) < 0.001:
  18.         break
  19.  
  20. plt.figure()
  21. plt.plot(x1,f(x1),'-b')
  22. plt.plot(x1,df(x1),'-r')
  23. black_patch = mpatches.Patch(color='black', label='f(x)')
  24. plt.legend(handles=[black_patch])
  25. red_patch = mpatches.Patch(color='red', label='df(x)')
  26. plt.legend(handles=[red_patch])
  27. plt.show()


schon jetzt herzlichen Dank fuer euere Ideen!!
Zuletzt geändert von Anonymous am Dienstag 14. Februar 2017, 12:29, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 1947
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: Newtonverfahren

Beitragvon noisefloor » Dienstag 14. Februar 2017, 12:25

Hallo,

ich verstehe die Frage ehrlich gesagt nicht - wo ist denn der Zusammenhand zwischen der Definition von Funktionen und einer for-Schleife, die außerhalb der Funktion eingesetzt wird?

Abgesehen davon ist dein Code so nicht lauffähig - in der Zeile `x[1] = 2` bekommst du einen `NameError`.

Gruß, noisefloor
BlackJack

Re: Newtonverfahren

Beitragvon BlackJack » Dienstag 14. Februar 2017, 12:35

@peter.pan: Und was hat das mit dem Newtonverfahren zu tun? War das nicht was mit Intervallschachtelung und wo man einen Startwert benötigt von dem aus man sich dem Ergebnis nähern kann? Davon sehe ich in dem Code auch nichts.
peter.pan
User
Beiträge: 10
Registriert: Dienstag 14. Februar 2017, 11:29

Re: Newtonverfahren

Beitragvon peter.pan » Dienstag 14. Februar 2017, 14:32

hey leute,

genau das ist mein Problem, ich habe die Funktion definiert und die For-Schleife, wei- aber nicht wie ich beides zusammenbringen kann. Das Newton-Verfahren steht in Zeile 16. Ich habe nun das Problem, dass ich den ersten Startpunkt als x_0 da irgendwie rein bekommen muss, der ist ja im ersten Fall x[i] = x_0.

Ich habe mir uebrigens die Aufgabe selbst ausgedacht..Danke schon mal fuer euere Hilfe...Gruss peter.pan
peter.pan
User
Beiträge: 10
Registriert: Dienstag 14. Februar 2017, 11:29

Re: Newtonverfahren

Beitragvon peter.pan » Dienstag 14. Februar 2017, 14:33

...und ich dachte mit 'x[1] = 2' kann ich den ersten Startwert annehmen...
peter.pan
User
Beiträge: 10
Registriert: Dienstag 14. Februar 2017, 11:29

Re: Newtonverfahren

Beitragvon peter.pan » Dienstag 14. Februar 2017, 14:35

...ausserdem bekomme ich im debugging-modus angezeigt, dass auch f(x) nicht definiert ist.
Sirius3
User
Beiträge: 6549
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Newtonverfahren

Beitragvon Sirius3 » Dienstag 14. Februar 2017, 15:32

@peter.pan: Bevor man Variablen benutzen kann, muß man sie definieren, z.B. eine leere Liste `x = []`. Da die Liste aber leer ist, kann man nicht auf beliebige Elemente zugreifen, sondern muß erst welche hineinstecken (z.B. mit `x.append(2)`)
peter.pan
User
Beiträge: 10
Registriert: Dienstag 14. Februar 2017, 11:29

Re: Newtonverfahren

Beitragvon peter.pan » Dienstag 14. Februar 2017, 15:41

ja, das ist mir klar, daher habe ich in Zeile 14 definiert, kann ich das nicht so machen?... Also wenn ich deinen Rat befolge ist Zeile 14 dann x.append(2)?
peter.pan
User
Beiträge: 10
Registriert: Dienstag 14. Februar 2017, 11:29

Re: Newtonverfahren

Beitragvon peter.pan » Dienstag 14. Februar 2017, 15:45

@Sirius3:
ich habe deinen Tipp versucht einzubauen, mit x.append(2) wir allerdings immernoch angegeben: name 'x' is not defined.

Aber trotzdem dank Dir!
Benutzeravatar
noisefloor
User
Beiträge: 1947
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: Newtonverfahren

Beitragvon noisefloor » Dienstag 14. Februar 2017, 15:49

Hallo,

mit x.append(2) wir allerdings immernoch angegeben: name 'x' is not defined.

Natürlich - solange du nicht x erst definierst - so wie Sirius3 in seinem Post ja auch schreibt - kannst du die Liste auch nicht befüllen, weil nicht existent.

Gruß, noisefloor
peter.pan
User
Beiträge: 10
Registriert: Dienstag 14. Februar 2017, 11:29

Re: Newtonverfahren

Beitragvon peter.pan » Dienstag 14. Februar 2017, 16:16

aber, wie befuellt man denn dies???

hier eine weiter Idee:

  1. def f(x):
  2.     return 2*x + 4*x**2 - 3*x**3 - 1
  3.  
  4. def df(x):
  5.     return 2 + 8*x - 9*x**2
  6.  
  7.  
  8.  
  9. n=50
  10. x0=2
  11. for val in range(1,n):
  12.     x2 = x0 - f(x0)/df(x0)
  13.     if f(x2) < 0.001:
  14.         break
  15.     x0 = x2
  16.     print('the solution is: ')
  17.     print(x2,f(x2))
Zuletzt geändert von Anonymous am Dienstag 14. Februar 2017, 16:20, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

Re: Newtonverfahren

Beitragvon BlackJack » Dienstag 14. Februar 2017, 16:20

@peter.pan: Vielleicht solltest Du ein Python-Grundlagentutorial durcharbeiten statt zu versuchen Code zu raten. Das funktioniert nämlich nicht. In der Python-Dokumentation gibt es ein Tutorial.
peter.pan
User
Beiträge: 10
Registriert: Dienstag 14. Februar 2017, 11:29

Re: Newtonverfahren

Beitragvon peter.pan » Dienstag 14. Februar 2017, 16:33

dann gebt mir doch bitte mal einen Tipp:
ich weiss wie ich funktionen definiere und wie for schleifen funktonieren, aber die verknuepfung ist mir raetzelhaft, daher habe ich das hier gepostet, da hilft auch kein python-buch, dazu habe ich schon zwei durch gearbeitet...
Benutzeravatar
noisefloor
User
Beiträge: 1947
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Re: Newtonverfahren

Beitragvon noisefloor » Dienstag 14. Februar 2017, 18:15

Hallo,

aber du hast offensichtliche Defizite beim Anlegen von Variablen (ink. Listen) und Basis-Operationen mit Listen, wie einfügen von Elementen. Daher rührt auch der Hinweis, mal das Python-Tutorial durchzuarbeiten. Das sind nämlich absolute Grundlagen.

Gruß, noisefloor
peter.pan
User
Beiträge: 10
Registriert: Dienstag 14. Februar 2017, 11:29

Re: Newtonverfahren

Beitragvon peter.pan » Dienstag 14. Februar 2017, 18:59

das ist echt sehr bedauerlich, dass alle nur auf meine Fehler eingegangen sind und keine konstruktiven Hilfestellung dargelegt haben. Das finde ich schon schade, ich habe mich ja schliesslich angemeldet, da ich beim Durcharbeiten, meines zweiten Python Buches gerne mal ein eigenes Beispiel diskutieren wollte. Daher werde ich mich wieder abmelden, so kann ich dann natuerlich auch fuer das Forum, wenn ich die Sprache "drauf" habe nicht mehr fuer andere zur Verfuegung stehen und helfen...so schnell verliert man user...

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder