Beispiel #1
0
 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)))
Beispiel #2
0
 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)))
Beispiel #3
0
 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())
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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
Beispiel #7
0
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())
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #11
0
 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)
Beispiel #12
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
Beispiel #13
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
Beispiel #14
0
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])
Beispiel #15
0
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
Beispiel #16
0
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]))
Beispiel #17
0
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
Beispiel #18
0
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
Beispiel #19
0
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
Beispiel #20
0
 def test_poly_eval(self):
     c = Numeric.ones((3,))
     x = 2
     assert(poly.poly_eval(c,x) == 7.0)
Beispiel #21
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
Beispiel #22
0
def test_poly_eval():
    c = numx.ones((3,))
    x = 2
    poly.poly_eval(c,x)
Beispiel #23
0
 def test_poly_eval(self):
     c = Numeric.ones((3,))
     x = 2
     assert(poly.poly_eval(c,x) == 7.0)
Beispiel #24
0
def test_poly_eval():
    c = numx.ones((3, ))
    x = 2
    poly.poly_eval(c, x)
Beispiel #25
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