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
Wendepunkt einer Kurve
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
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
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
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
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:
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))