Seite 1 von 1
Wendepunkt einer Kurve
Verfasst: Dienstag 3. Oktober 2017, 22:20
von Micha_uni
Hallo liebe Python-Fans!
Ich habe eine Datenmenge(gemessene Punkte), die eine Magnetisierung darstellt. Diese habe ich gegen Temperatur aufgetragen und gefittet.
Nun möchte ich den Wendepunkt der Kurve finden. Ich habe aber keine Funktion, um sie abzuleiten.
Gibt es in Python einen Weg dafür?
LG
Micha
Re: Wendepunkt einer Kurve
Verfasst: Dienstag 3. Oktober 2017, 22:23
von Sirius3
@Micha_uni: welche Funktion hast Du denn angefittet?
Re: Wendepunkt einer Kurve
Verfasst: Mittwoch 4. Oktober 2017, 01:31
von Micha_uni
wie gesagt, keine Funktion. Nur gemessene Punkte gegen Temperatur.
Die Kurve sieht sehr gut aus, weiß nur nicht, wie ich daraus den Wendepunkt raus kriegen kann.
LG
Micha
Re: Wendepunkt einer Kurve
Verfasst: Mittwoch 4. Oktober 2017, 07:17
von Sirius3
@Micha_uni: wenn Du nur Punkte hast, hast Du keine Kurve und auch keinen Wendepunkt. Oben schreibst Du noch, dass Du gefittet hast. Was denn nun?
Re: Wendepunkt einer Kurve
Verfasst: Mittwoch 4. Oktober 2017, 07:59
von bwbg
Beschreibe bitte genau, wie der "Wendepunkt" einer Sequenz von Punkten und "Punkt" definiert sind. Das wäre dann bereits 90% der Lösung.
Re: Wendepunkt einer Kurve
Verfasst: Mittwoch 4. Oktober 2017, 14:24
von Micha_uni
Hallo nochmal!
Ich bin dabei das Ising-Modell über Monte-Carlo Methode zu simulieren. Der Code ist ziemlich lang und kompliziert, deshalb habe ich ihn hier nicht kopiert. Der Code spukt mir dann am Ende einige tausende Punkte(je nach Genauigkeit und Fehlertoleranz kann man die Anzahl der Punkte bestimmen).
Es gibt eine Abhängigkeit von der Temperatur zwar, mein f(T) ist aber keine einfache Funktion, die sich herleiten lässt. f(T) kommt Zustände aus :
1. Spin-Konfigurationen eines Gitters(über random.choice[-1,1] konstruiert)
2. random() für Spinflip
3. exp(-1/T)
Nur das dritte Argument ist analytisch ableitbar.
Wenn man die Punkte gegen T aufträgt und fittet, erhält man eine Kurve, deren Wendepunkt bei T=2,269 liegen soll.
Meine Kurve sieht sehr gut aus und passt zur Theorie. Ich muss aber aus meiner Simulation den Wert berechnen.
Ich dachte, da man nach dem Fitten eine Kurve hat, sollte auch möglich sein, daraus den Wendepunkt zu erhalten.
LG
Re: Wendepunkt einer Kurve
Verfasst: Mittwoch 4. Oktober 2017, 14:47
von __deets__
Wenn du gefittet hast, solltest du doch die Koeffezienten zB des Polynoms haben, oder nicht? Das sollte dann doch in sympy uebertragbar sein.
Oder du gehst es numerisch an. Gab's da nicht was von Newton?
Re: Wendepunkt einer Kurve
Verfasst: Mittwoch 4. Oktober 2017, 15:25
von Micha_uni
Das Problem liegt daran, dass ich mich mit dem Python nicht genügend gut auskenne.
sciypy war mir zu kompliziert. Ich habe es nicht benutzen können. Stattdessen habe ich polyfit benutzt und deq=3 gesetzt.
Zu meiner Kurve passt eigentlich "Cubic Spline-fitting", weil meine Kurve beleibt bei 1 bis kurz vor Tc, dann fällt schnell runter bis auf null.
Ich weiß aber nicht, wie ich Cubic Spline anwenden kann. Diese ganzen Parameter habe ich ja nicht. bei polyfit habe ich ledeglich das Grad des Polynoms auf 3 gestellt. Es kommt einiger Maßen zufriedenstellend raus.
magnetisierung_f = np.polyfit(T, magnetisierung, 3)
y_magnetisierung_f = np.polyval(magnetisierung_f, T)
Es gibt sicherlich elegantere Wege in Pythone zu fitten. Bin aber blutiger Anfänger im Programmieren.
Hättest du vielleicht ne Idee, aus Datenmengen und nicht aus analytisch ableitbare Funktionen zu fitten?
Danke dir.....
LG
Re: Wendepunkt einer Kurve
Verfasst: Mittwoch 4. Oktober 2017, 15:45
von __deets__
Ich habe nicht von scipy gesprochen. Du hast doch ein Polynom dritten Grades, und dazu die Koeffizienten. Das ist doch sogar per Hand ableitbar, wenn du das machen willst.
Und mit sympy (was anderes als scipy) kannst du auch Funktionen symbolisch ableiten, und dann zB Nullstellen der Ableitung finden.
http://docs.sympy.org/0.6.7/modules/polynomials.html
http://docs.sympy.org/0.6.7/modules/pol ... .Poly.diff
Damit bekomme ich zB die Nullstellen meines Testpolynoms:
Code: Alles auswählen
from sympy import Poly, roots
from sympy.abc import x, y, z
p = Poly(x**3 + 2*x**2, x)
d = p.diff()
print(d)
print(roots(d))
Re: Wendepunkt einer Kurve
Verfasst: Mittwoch 4. Oktober 2017, 16:10
von Sirius3
@Micha_uni: wenn Du polyfit nimmst, hast Du keine Splines. polyfit gibt Dir einfach die Koeffizienten von a*x^3+b*x^2+c*x+d zurück, und von dieser Funktion solltest Du die Wendepunkte händisch bestimmen können.