ich schlage mich erst seit ein paar Wochen mit Python rum und habe leider auch nicht viel Ahnung von Numerik.
Ich hoffe daher einfach mal, dass dieser Eintrag nicht unnötig ist und die Lösung offensichtlich (zumindest haben meine Recherchen nichts ergeben, wobei ich auch nicht so genau wusste wonach suchen).
Aber zum Kern der Sache:
Ich habe Messwerte, die ich gerne fitten würde. Dafür verwende ich momentan scipy und das odr-Modul. Passt wunderbar bis auf eine Sache. Ich fitte ein Polynom 2. Ordnung und dabei sind nur Ergebnisse physikalisch sinnvoll mit Koeffizienten kleiner Null. Jetzt kann es natürlich sein, dass mathematisch aber ein Polynom mit einem oder mehreren Koeffizienten größer Null besser passt. Kann ich da irgendwas dagegen tun?
Meine momentane Fitfunktion sieht in etwa so aus (wobei ich noch nicht alle Details verstanden habe):
Code: Alles auswählen
import numpy
import scipy
import scipy.odr
def cumfit(x, y):
#Startwerte
betanull = 1.0
betaeins = 2.0
betazwei = 0.25
xStandardAbweichung = 0.5
yStandardAbweichung = 0.5
coeffs = numpy.zeros((2,2),float)
PolynomZweiter = scipy.odr.Model(lambda B,x: B[2]*x*x+ B[1]*x + B[0])
inODRDaten = scipy.odr.RealData(x, y, sx=xStandardAbweichung, sy=yStandardAbweichung)
ODRDaten = scipy.odr.ODR(inODRDaten, PolynomZweiter, beta0=[betanull, betaeins, betazwei])
ausODRDaten = ODRDaten.run()
for i in range(2): #fuer weitere Berechnungen wird nur B[0] und B[1] benoetigt
coeffs[i,0] = ausODRDaten.beta[i]
coeffs[i,1] = ausODRDaten.sd_beta[i]
return coeffs