def setUp(self): self.dim = 100 self.param = 2 self.a = 1000.1 self.b = 100 self.x = Numeric.arange(self.dim) x = self.x self.y = self.a + self.b * self.x self.w = Numeric.ones((self.dim,)) self.ws = multifit.linear_workspace(self.dim, self.param) self.X = Numeric.transpose(Numeric.array((Numeric.ones(self.dim,), x)))
def setUp(self): self.dim = 100 self.param = 2 self.a = 1000.1 self.b = 100 self.x = Numeric.arange(self.dim) x = self.x self.y = self.a + self.b * self.x self.w = Numeric.ones((self.dim, )) self.ws = multifit.linear_workspace(self.dim, self.param) self.X = Numeric.transpose(Numeric.array( (Numeric.ones(self.dim, ), x)))
def setUp(self): t = Numeric.arange(self._getn()) y = testfunc(t, self.A, self.lambda_, self.b) sigma = Numeric.ones(self._getn()) * 0.1 self.data = Numeric.array((t, y, sigma), Float) self.sys = multifit_nlin.gsl_multifit_function_fdf( exp_f, exp_df, exp_fdf, self.data, self._getn(), self._getp())
def jac(t, y, mu): dfdy = numx.ones((2, 2), ) * 1. dfdy[0, 0] = 0.0 dfdy[0, 1] = 1.0 dfdy[1, 0] = -2.0 * mu * y[0] * y[1] - 1.0 dfdy[1, 1] = -mu * (y[0]**2 - 1.0) dfdt = numx.zeros((2, )) return dfdy, dfdt
def jac(t, y, mu): dfdy = numx.ones((2,2),) * 1. dfdy[0, 0] = 0.0 dfdy[0, 1] = 1.0 dfdy[1, 0] = -2.0 * mu * y[0] * y[1] - 1.0 dfdy[1, 1] = -mu * (y[0]**2 - 1.0) dfdt = numx.zeros((2,)) return dfdy, dfdt
def jac(t, y, mu): dfdy = Numeric.ones((2,2), Numeric.Float) dfdy[0, 0] = 0.0 dfdy[0, 1] = 1.0 dfdy[1, 0] = -2.0 * mu * y[0] * y[1] - 1.0 dfdy[1, 1] = -mu * (y[0]**2 - 1.0) dfdt = Numeric.zeros((2,)) return dfdy, dfdt
def jac(t, y, mu): dfdy = Numeric.ones((2, 2), Numeric.Float) dfdy[0, 0] = 0.0 dfdy[0, 1] = 1.0 dfdy[1, 0] = -2.0 * mu * y[0] * y[1] - 1.0 dfdy[1, 1] = -mu * (y[0]**2 - 1.0) dfdt = Numeric.zeros((2, )) return dfdy, dfdt
def setUp(self): t = Numeric.arange(self._getn()); y = testfunc(t, self.A, self.lambda_, self.b) sigma = Numeric.ones(self._getn()) * 0.1 self.data = Numeric.array((t,y,sigma), Float) self.sys = multifit_nlin.gsl_multifit_function_fdf(exp_f, exp_df, exp_fdf, self.data, self._getn(), self._getp())
def jac(t, y, mu): dfdy = Numeric.ones((2,2), Numeric.Float) dfdy[0, 0] = 0.0 dfdy[0, 1] = 0.0 dfdy[1, 0] = 0.0 dfdy[1, 1] = 0.0 dfdt = Numeric.zeros((2,)) dfdt[0] = 2 dfdt[1] = 3 * 2 * t return dfdy, dfdt
def jac(t, y, mu): dfdy = Numeric.ones((2, 2), Numeric.Float) dfdy[0, 0] = 0.0 dfdy[0, 1] = 0.0 dfdy[1, 0] = 0.0 dfdy[1, 1] = 0.0 dfdt = Numeric.zeros((2, )) dfdt[0] = 2 dfdt[1] = 3 * 2 * t return dfdy, dfdt
def test_wmean(self): self.failIf(wmean(numx.array([1,1,1]), numx.array([-1.,-3.,1.])) != -1.0) self.failIf(wmean(numx.array([1,1,1]),[1,2,3]) != 2) data = numx.array([1.,2.,3.,4.,5.,6.,7.,8.,9.,10.]) weight = numx.ones(data.shape) self.failIf(wmean(weight,data) != 5.5) self.failIf(wmean(weight[::2],data[::2]) != 5.0) self.failIf(wmean(weight[::-1],data[::-1]) != 5.5) self.failIf(wmean(weight[::-2],data[::-2]) != 6.0)
def jac(t, y, mu): #print "--> jac", t, y dfdy = numx.ones((2, 2), Float) dfdy[0, 0] = 0.0 dfdy[0, 1] = 1.0 dfdy[1, 0] = -2.0 * mu * y[0] * y[1] - 1.0 dfdy[1, 1] = -mu * (y[0]**2 - 1.0) #print "dfdy[0, 0]", dfdy[0, 0] #print "dfdy[0, 1]", dfdy[0, 1] #print "dfdy[1, 0]", dfdy[1, 0] #print "dfdy[1, 1]", dfdy[1, 1] dfdt = numx.zeros((2, )) return dfdy, dfdt
def jac(t, y, mu): #print "--> jac", t, y dfdy = numx.ones((2,2), Float) dfdy[0, 0] = 0.0 dfdy[0, 1] = 1.0 dfdy[1, 0] = -2.0 * mu * y[0] * y[1] - 1.0 dfdy[1, 1] = -mu * (y[0]**2 - 1.0) #print "dfdy[0, 0]", dfdy[0, 0] #print "dfdy[0, 1]", dfdy[0, 1] #print "dfdy[1, 0]", dfdy[1, 0] #print "dfdy[1, 1]", dfdy[1, 1] dfdt = numx.zeros((2,)) return dfdy, dfdt
def run_fdfsolver(): A = 1. lambda_ = .1 b = .5 n = 40 p = 3 t = numx.arange(n); y = testfunc(t, A, lambda_, b) sigma = numx.ones(n) * 0.1 data = numx.array((t,y,sigma), numx.Float) #mysys = multifit_nlin.gsl_multifit_function_fdf(exp_f, exp_df, exp_fdf, # data, n,p) pygsl.set_debug_level(0) solver = multifit_nlin.lmsder(n, p) pygsl.set_debug_level(0) #solver = multifit_nlin.lmder(mysys, n, p) x = numx.array((1.0, 0.0, 0.0)) pygsl.set_debug_level(0) solver.set(exp_f, exp_df, exp_fdf, x, data) pygsl.set_debug_level(0) print "# Testing solver ", solver.name() print "# %5s %9s %9s %9s %10s" % ("iter", "A", "lambda", "b", "|f(x)|") for iter in range(20): status = solver.iterate() x = solver.x() dx = solver.dx() f = solver.f() J = solver.J() #tdx = multifit_nlin.gradient(J, f) #status = multifit_nlin.test_delta(dx, x, 1e-8, 1e-8) status = solver.test_delta(1e-8, 1e-8) fn = numx.sqrt(numx.sum(f*f)) if status == 0: print "# Convereged :" if status == 0: break print " %5d % .7f % .7f % .7f % .7f" %(iter, x[0], x[1], x[2], fn) else: raise ValueError, "Number of Iterations exceeded!" J = solver.J() covar = multifit_nlin.covar(solver.J(), 0.0) print "# A = % .5f +/- % .5f" % (x[0], covar[0,0]) print "# lambda = % .5f +/- % .5f" % (x[1], covar[1,1]) print "# b = % .5f +/- % .5f" % (x[2], covar[2,2])
def calculate(x, y, sigma): n = len(x) X = numx.ones((n,3),)*1. X[:,0] = 1.0 X[:,1] = x X[:,2] = x ** 2 w = 1.0 / sigma ** 2 work = pygsl.multifit.linear_workspace(n,3) c, cov, chisq = pygsl.multifit.wlinear(X, w, y, work) c, cov, chisq = pygsl.multifit.linear(X, y, work) print "# best fit: Y = %g + %g * X + %g * X ** 2" % tuple(c) print "# covariance matrix #" print "[[ %+.5e, %+.5e, %+.5e ] " % tuple(cov[0,:]) print " [ %+.5e, %+.5e, %+.5e ] " % tuple(cov[1,:]) print " [ %+.5e, %+.5e, %+.5e ]]" % tuple(cov[2,:]) print "# chisq = %g " % chisq return c, cov, chisq
def run_fdfsolver(): A = 1. lambda_ = .1 b = .5 n = 40 p = 3 t = numx.arange(n) y = testfunc(t, A, lambda_, b) sigma = numx.ones(n) * 0.1 data = numx.array((t, y, sigma), ) mysys = multifit_nlin.gsl_multifit_function_fdf(exp_f, exp_df, exp_fdf, data, n, p) solver = multifit_nlin.lmsder(mysys, n, p) #solver = multifit_nlin.lmder(mysys, n, p) x = numx.array((1.0, 0.0, 0.0)) solver.set(x) print("# Testing solver ", solver.name()) print("# %5s %9s %9s %9s %10s" % ("iter", "A", "lambda", "b", "|f(x)|")) for iter in range(20): status = solver.iterate() x = solver.getx() dx = solver.getdx() f = solver.getf() J = solver.getJ() tdx = multifit_nlin.gradient(J, f) status = multifit_nlin.test_delta(dx, x, 1e-8, 1e-8) fn = numx.sqrt(numx.sum(f * f)) if status == errno.GSL_SUCCESS: print("# Convereged :") if status == errno.GSL_SUCCESS: break print(" %5d % .7f % .7f % .7f % .7f" % (iter, x[0], x[1], x[2], fn)) else: raise ValueError("Number of Iterations exceeded!") J = solver.getJ() covar = multifit_nlin.covar(solver.getJ(), 0.0) print("# A = % .5f +/- % .5f" % (x[0], covar[0, 0])) print("# lambda = % .5f +/- % .5f" % (x[1], covar[1, 1])) print("# b = % .5f +/- % .5f" % (x[2], covar[2, 2]))
def run(): r = rng.rng() bw = bspline(4, nbreak) # Data to be fitted x = 15. / (N - 1) * numx.arange(N) y = numx.cos(x) * numx.exp(0.1 * x) sigma = .1 w = 1.0 / sigma**2 * numx.ones(N) dy = r.gaussian(sigma, N) y = y + dy # use uniform breakpoints on [0, 15] bw.knots_uniform(0.0, 15.0) X = numx.zeros((N, ncoeffs)) for i in range(N): B = bw.eval(x[i]) X[i, :] = B # do the fit c, cov, chisq = multifit.wlinear(X, w, y, multifit.linear_workspace(N, ncoeffs)) # output the smoothed curve res_y = [] res_y_err = [] for i in range(N): B = bw.eval(x[i]) yi, yi_err = multifit.linear_est(B, c, cov) res_y.append(yi) res_y_err.append(yi_err) #print yi, yerr res_y = numx.array(res_y) res_y_err = numx.array(res_y_err) return ( x, y, ), (x, res_y), res_y_err
def calculate(x, y, sigma): n = len(x) X = numx.ones((n, 3), ) * 1. X[:, 0] = 1.0 X[:, 1] = x X[:, 2] = x**2 w = 1.0 / sigma**2 work = pygsl.multifit.linear_workspace(n, 3) # pygsl.init.set_debug_level(3) print(X.shape, w.shape) #c, cov, chisq = pygsl.multifit.linear(X, y, work) #c, cov, chisq = pygsl.multifit.linear(X, y) pygsl.init.set_debug_level(3) c, cov, chisq = pygsl.multifit.wlinear(X, w, y, work) print("# best fit: Y = %g + %g * X + %g * X ** 2" % tuple(c)) print("# covariance matrix #") print("[[ %+.5e, %+.5e, %+.5e ] " % tuple(cov[0, :])) print(" [ %+.5e, %+.5e, %+.5e ] " % tuple(cov[1, :])) print(" [ %+.5e, %+.5e, %+.5e ]]" % tuple(cov[2, :])) print("# chisq = %g " % chisq) return c, cov, chisq
def run(): r = rng.rng() bw = bspline(4, nbreak) # Data to be fitted x = 15. / (N-1) * numx.arange(N) y = numx.cos(x) * numx.exp(0.1 * x) sigma = .1 w = 1.0 / sigma**2 * numx.ones(N) dy = r.gaussian(sigma, N) y = y + dy # use uniform breakpoints on [0, 15] bw.knots_uniform(0.0, 15.0) X = numx.zeros((N, ncoeffs)) for i in range(N): B = bw.eval(x[i]) X[i,:] = B # do the fit c, cov, chisq = multifit.wlinear(X, w, y, multifit.linear_workspace(N, ncoeffs)) # output the smoothed curve res_y = [] res_y_err = [] for i in range(N): B = bw.eval(x[i]) yi, yi_err = multifit.linear_est(B, c, cov) res_y.append(yi) res_y_err.append(yi_err) #print yi, yerr res_y = numx.array(res_y) res_y_err = numx.array(res_y_err) return (x, y,), (x, res_y), res_y_err
def test_poly_eval(self): c = Numeric.ones((3,)) x = 2 assert(poly.poly_eval(c,x) == 7.0)
def setUp(self): self.a = 0.0 self.b = 100 self.x = Numeric.arange(100) self.y = self.a + self.b * self.x self.w = Numeric.ones(100) * 1000000
def test_poly_eval(): c = numx.ones((3,)) x = 2 poly.poly_eval(c,x)
def test_poly_eval(): c = numx.ones((3, )) x = 2 poly.poly_eval(c, x)