polyfit działa, ale istnieją lepsze minimalizatory najmniejsze kwadratowe. Polecam kmpfit, dostępnego na
http://www.astro.rug.nl/software/kapteyn-beta/kmpfittutorial.html
Jest bardziej wytrzymała, że polyfit, a tam jest przykładem na ich stronie, która pokazuje jak zrobić prosty liniowy dopasowanie, które powinny zapewnić podstawy robi 2nd zamówienie dopasowanie wielomianowe.
def model(p, v, x, w):
a,b,c,d,e,f,g,h,i,j,k = p #coefficients to the polynomials
return a*v**2 + b*x**2 + c*w**2 + d*v*x + e*v*w + f*x*w + g*v + h*x + i*y + k
def residuals(p, data): # Function needed by fit routine
v, x, w, z = data # The values for v, x, w and the measured hypersurface z
a,b,c,d,e,f,g,h,i,j,k = p #coefficients to the polynomials
return (z-model(p,v,x,w)) # Returns an array of residuals.
#This should (z-model(p,v,x,w))/err if
# there are error bars on the measured z values
#initial guess at parameters. Avoid using 0.0 as initial guess
par0 = [1.0, 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0]
#create a fitting object. data should be in the form
#that the functions above are looking for, i.e. a Nx4
#list of lists/tuples like (v,x,w,z)
fitobj = kmpfit.Fitter(residuals=residuals, data=data)
# call the fitter
fitobj.fit(params0=par0)
Sukces tych rzeczy jest ściśle uzależniona od wartości wyjściowych do ataku, więc wybrałem ostrożnie, jeśli to możliwe. Przy tak wielu darmowych parametrach rozwiązaniem może być wyzwanie.
Opublikowałem kod, aby rozwiązać ten problem [https://github.com/mrocklin/multipolyfit](https://github.com/mrocklin/multipolyfit) – MRocklin