doppelter Fit

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
trublu
User
Beiträge: 18
Registriert: Montag 20. Juni 2016, 20:05

Hallo,

ich soll einen (indirekten?) Fit nachbauen und hab da so meine Probleme mit. Ein ehemaliger Kollege hat das mal gemacht, er hat aber mittlerweile die Firma verlassen und kann nicht mehr gefragt werden.

Und zwar gibt es Messgrößen x. Aus diesen Daten soll eine andere Größe y = f(x;a) bestimmt werden, wobei a ein freier Parameter ist. Dieser Parameter soll nun so bestimmt werden, dass eine andere Funktion g(y;b) mit freiem Parameter b bestmöglich gefittet wird, z.B. die berechneten y-Werte auf einer Geraden liegen.

Gesucht sind also die freien Parameter a und b und deren Kovarianzmatrix. Ich weiß aber nur wie man Funktionen direkt fittet, d.h. für feste a die Funktion g zu fitten. Wie aber schaffe ich es, dass auch der a Parameter mit gefittet wird? Ich hoffe es ist halbwegs nachvollziehbar war ich erreichen will.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

trublu hat geschrieben:ich soll einen (indirekten?) Fit nachbauen und hab da so meine Probleme mit. Ein ehemaliger Kollege hat das mal gemacht, er hat aber mittlerweile die Firma verlassen und kann nicht mehr gefragt werden.
Und der hat nur Endergebnisse hinterlassen und keinen Weg? Ist das eine gute Art der Dokumentation? ;-)

trublu hat geschrieben:Und zwar gibt es Messgrößen x. Aus diesen Daten soll eine andere Größe y = f(x;a) bestimmt werden, wobei a ein freier Parameter ist. Dieser Parameter soll nun so bestimmt werden, dass eine andere Funktion g(y;b) mit freiem Parameter b bestmöglich gefittet wird, z.B. die berechneten y-Werte auf einer Geraden liegen.
Dem kann ich nicht folgen. X sind verrauschte Messwerte? Daraus machst du eine Funktion (z.B eine Gerad)? Dann stelle ich mir vor das y eine Funktion ist die diese Gerade modifiziert (offset oder Steigung z.B). Dann ist g aber doch auch eine Funktion von f(x;a;b) oder nicht?
trublu
User
Beiträge: 18
Registriert: Montag 20. Juni 2016, 20:05

Sr4l hat geschrieben: Und der hat nur Endergebnisse hinterlassen und keinen Weg? Ist das eine gute Art der Dokumentation? ;-)
Natürlich ist es das nicht. Ich kann aber nicht ändern was bereits passiert ist. Ich kann es jetzt lediglich für die Zukunft besser machen :)
trublu hat geschrieben:Dem kann ich nicht folgen. X sind verrauschte Messwerte? Daraus machst du eine Funktion (z.B eine Gerad)? Dann stelle ich mir vor das y eine Funktion ist die diese Gerade modifiziert (offset oder Steigung z.B). Dann ist g aber doch auch eine Funktion von f(x;a;b) oder nicht?
hmmm eigentlich schon. Entweder habe ich das schlecht beschrieben oder ich bin nicht in der Lage das für mein Problem anzupassen. Also mal etwas konkreter.

Meine Messgröße heißt jetzt Z. Aus diesem Z berechne ich das Y als Y = Z/A. Wenn ich jetzt Y gegen X plotte hätte ich gerne eine Gerade Y = B*X. Und das überfordert mich.
ChGr
User
Beiträge: 4
Registriert: Montag 1. August 2016, 17:18

Also willst Du einfach eine lineare Regression machen? Das geht z.B. damit:

http://docs.scipy.org/doc/scipy-0.14.0/ ... gress.html

Code: Alles auswählen

from scipy import stats
import numpy as np
x = np.random.random(10)
y = np.random.random(10)
slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
Zuletzt geändert von Anonymous am Mittwoch 17. August 2016, 13:55, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
trublu
User
Beiträge: 18
Registriert: Montag 20. Juni 2016, 20:05

eigentlich nicht. Ich hab ja keine festen y Werte, sondern da steckt ja auch ein Parameter drin der gefittet werden soll und das klappt so ja nicht oder?
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

trublu hat geschrieben:Meine Messgröße heißt jetzt Z. Aus diesem Z berechne ich das Y als Y = Z/A. Wenn ich jetzt Y gegen X plotte hätte ich gerne eine Gerade Y = B*X. Und das überfordert mich.
Du hast also Wertepaare (Z, X). Deine Gleichung heißt also Z/A = B*X oder Z = A*B*X. Also hast Du doch eine Form der linearen Regression und wie Du leicht sehen kannst, kannst Du nur A*B bestimmen, aber niemals A und B getrennt.
trublu
User
Beiträge: 18
Registriert: Montag 20. Juni 2016, 20:05

oh man dämlich dämlich dämlich... ja natürlich, das wird funktionieren. Vielen Dank
Antworten