forum.alglib.nethttp://forum.alglib.net/ lsfitfit is going crazy (nonlinear fit not near any points)http://forum.alglib.net/viewtopic.php?f=2&t=2231 Page 1 of 1

 Author: dediggefedde [ Fri Jan 30, 2015 5:34 pm ] Post subject: lsfitfit is going crazy (nonlinear fit not near any points) Hello again!I tried working with lsfitfit again, to fit a nonlinear function:y=c0 (x0+c1)^2/(1+c2* x1).I would like to get c0, c1 and c2 by providing datapoints ({x0,x1},y).However, I don't have a high amount of datapoints (~3-5) and only the order of magnitude for c-starting parameter.As a side-note, is this function solving the equation system when only called with 3 parameters? As far as I have experienced, it doesn't seem to and usually gets unaccurate at the 4th or 5th digit.A set of Parameters that I call the function with:Code:y="[130.9045354801, 135.9066659041, 131.9036065061, 123.9053434201]";x="[[32.13088888,128],[46.53452299,126],[49.49980573,128],[45.8625616,132]]";For this, the solution should be around c="[0.069118, 1184,4528.38, 0.810883]";The settings I call it with:Code:c="[0.01,1000,0.1]"cScale[0]=0.01;cScale[1]=1000;cScale[2]=0.1;epsf=1e-10;epsx=1e-10;maxits=0;diffstep=1e-7;bndl="[-1e8,-1e8,-1e8]";bndu="[-1e8,-1e8,-1e8]";The function and gradient:Code:void function_cx_1_func(const real_1d_array &c, const real_1d_array & x, double &func, void *ptr) {   func = c[0] * square(x[0] + c[1]) / square(1.0 + c[2] * x[1]);}void function_cx_1_grad(const real_1d_array &c, const real_1d_array & x, double &func, real_1d_array &grad, void *ptr) {   grad[0] = square(x[0] + c[1]) / square(1 + c[2] * x[1]);   grad[1] = 2 * c[0] * (x[0] + c[1]) / square(1 + c[2] * x[1]);   grad[2] = -2 * c[0] * c[1] * square(x[0] + c[1]) / (square(1 + c[2] * x[1])*(1 + c[2] * x[1]));}and the call to lsfitfit:Code:lsfitcreatefg(x, y, c, diffstep, state);lsfitsetcond(state, epsf, epsx, maxits);lsfitsetbc(state, bndl, bndu);lsfitsetscale(state, cScale);alglib::lsfitfit(state, function_cx_1_func, function_cx_1_grad);lsfitresults(state, info, c, rep);However, last time I tried this, the y-values of the fittet function at the x-coordinates were around 0.1 instead of 130... So I guess I messed up some accuracy-parameters... However after searching for days I still can't seem to find any clue how to use this right...Can someone please tell me if I misunderstood the using of e.g. epsx/epsf/cScale/diffstep to get a accurate fit?

 Page 1 of 1 All times are UTC Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Grouphttp://www.phpbb.com/