Example #1
0
    def test_nonlinearfit(self):
        """
        Compare NumericalLeastSquares with LinearLeastSquares to see if errors
        are implemented consistently.
        """
        from symfit import Variable, Parameter, Fit

        t_data = np.array([1.4, 2.1, 2.6, 3.0, 3.3])
        y_data = np.array([10, 20, 30, 40, 50])

        sigma = 0.2
        n = np.array([5, 3, 8, 15, 30])
        sigma_t = sigma / np.sqrt(n)

        # We now define our model
        t, y = variables('t, y')
        g = Parameter(9.0)
        t_model = {t: (2 * y / g)**0.5}

        # Different sigma for every point
        fit = NonLinearLeastSquares(t_model, y=y_data, t=t_data, sigma_t=sigma_t)
        import time
        tick = time.time()
        fit_result = fit.execute()
#        print(time.time() - tick)

        fit = NumericalLeastSquares(t_model, y=y_data, t=t_data, sigma_t=sigma_t)
        tick = time.time()
        num_result = fit.execute()
#        print(time.time() - tick)

        self.assertAlmostEqual(num_result.value(g), fit_result.value(g))

        for cov1, cov2 in zip(num_result.params.covariance_matrix.flatten(), fit_result.params.covariance_matrix.flatten()):
            self.assertAlmostEqual(cov1, cov2)
Example #2
0
    def test_2D_fitting(self):
        np.random.seed(1)
        xdata = np.random.randint(-10, 11, size=(2, 100))
        zdata = 2.5 * xdata[0]**2 + 7.0 * xdata[1]**2

        a = Parameter('a')
        b = Parameter(name='b', value=10)
        x, y, z = variables('x, y, z')
        new = {z: a * x**2 + b * y**2}

        fit = NonLinearLeastSquares(new, x=xdata[0], y=xdata[1], z=zdata)
        fit_result = fit.execute()

        self.assertAlmostEqual(fit_result.value(a), 2.5)
        self.assertAlmostEqual(np.abs(fit_result.value(b)), 7.0)
Example #3
0
    def test_2D_fitting(self):
        np.random.seed(1)
        xdata = np.random.randint(-10, 11, size=(2, 100))
        zdata = 2.5*xdata[0]**2 + 7.0*xdata[1]**2

        a = Parameter()
        b = Parameter(10)
        x = Variable()
        y = Variable()
        z = Variable()
        new = {z: a*x**2 + b*y**2}

        fit = NonLinearLeastSquares(new, x=xdata[0], y=xdata[1], z=zdata)
        fit_result = fit.execute()

        self.assertAlmostEqual(fit_result.value(a), 2.5)
        self.assertAlmostEqual(np.abs(fit_result.value(b)), 7.0)
Example #4
0
    def test_nonlinearfit(self):
        """
        Compare NumericalLeastSquares with LinearLeastSquares to see if errors
        are implemented consistently.
        """
        from symfit import Variable, Parameter, Fit

        t_data = np.array([1.4, 2.1, 2.6, 3.0, 3.3])
        y_data = np.array([10, 20, 30, 40, 50])

        sigma = 0.2
        n = np.array([5, 3, 8, 15, 30])
        sigma_t = sigma / np.sqrt(n)

        # We now define our model
        t, y = variables('t, y')
        g = Parameter('g', 9.0)
        t_model = {t: (2 * y / g)**0.5}

        # Different sigma for every point
        fit = NonLinearLeastSquares(t_model,
                                    y=y_data,
                                    t=t_data,
                                    sigma_t=sigma_t)
        import time
        tick = time.time()
        fit_result = fit.execute()
        #        print(time.time() - tick)

        fit = Fit(t_model,
                  y=y_data,
                  t=t_data,
                  sigma_t=sigma_t,
                  minimizer=MINPACK)
        tick = time.time()
        num_result = fit.execute()
        #        print(time.time() - tick)

        self.assertAlmostEqual(num_result.value(g), fit_result.value(g))

        for cov1, cov2 in zip(num_result.covariance_matrix.flatten(),
                              fit_result.covariance_matrix.flatten()):
            self.assertAlmostEqual(cov1, cov2)