Beispiel #1
0
    def test_backwards_compatibility(self):
        """
        The LinearLeastSquares should give results compatible with the NumericalLeastSquare's
        and curve_fit. To do this I test here the simple analytical model also used to calibrate
        the definition of absolute_sigma.
        """
        N = 1000
        sigma = 31.4
        xn = np.arange(N, dtype=np.float)
        yn = np.zeros_like(xn)
        np.random.seed(10)
        yn = yn + np.random.normal(size=len(yn), scale=sigma)

        a = Parameter()
        y = Variable()
        model = {y: a}

        fit = LinearLeastSquares(model, y=yn, sigma_y=sigma, absolute_sigma=False)
        fit_result = fit.execute()

        fit = NumericalLeastSquares(model, y=yn, sigma_y=sigma, absolute_sigma=False)
        num_result = fit.execute()

        popt, pcov = curve_fit(lambda x, a: a * np.ones_like(x), xn, yn, sigma=sigma, absolute_sigma=False)


        self.assertAlmostEqual(fit_result.value(a), num_result.value(a))
        self.assertAlmostEqual(fit_result.stdev(a), num_result.stdev(a))

        self.assertAlmostEqual(fit_result.value(a), popt[0], 5)
        self.assertAlmostEqual(fit_result.stdev(a), pcov[0, 0]**0.5, 5)

        fit = LinearLeastSquares(model, y=yn, sigma_y=sigma, absolute_sigma=True)
        fit_result = fit.execute()

        fit = NumericalLeastSquares(model, y=yn, sigma_y=sigma, absolute_sigma=True)
        num_result = fit.execute()

        popt, pcov = curve_fit(lambda x, a: a * np.ones_like(x), xn, yn, sigma=sigma, absolute_sigma=True)

        self.assertAlmostEqual(fit_result.value(a), num_result.value(a))
        self.assertAlmostEqual(fit_result.stdev(a), num_result.stdev(a))

        self.assertAlmostEqual(fit_result.value(a), popt[0], 5)
        self.assertAlmostEqual(fit_result.stdev(a), pcov[0, 0]**0.5, 5)
Beispiel #2
0
    def test_linear_analytical_fit(self):
        a, b = parameters('a, b')
        x, y = variables('x, y')
        model = {y: a * x + b}

        data = [[0, 1], [1, 0], [3, 2], [5, 4]]
        xdata, ydata = (np.array(i, dtype='float64') for i in zip(*data))

        fit = LinearLeastSquares(model, x=xdata, y=ydata)
        fit_result = fit.execute()

        self.assertAlmostEqual(fit_result.value(a), 0.694915, 6) # values from Mathematica
        self.assertAlmostEqual(fit_result.value(b), 0.186441, 6)
    def test_linear_analytical_fit(self):
        a, b = parameters('a, b')
        x, y = variables('x, y')
        model = {y: a * x + b}

        data = [[0, 1], [1, 0], [3, 2], [5, 4]]
        xdata, ydata = (np.array(i, dtype='float64') for i in zip(*data))

        fit = LinearLeastSquares(model, x=xdata, y=ydata)
        fit_result = fit.execute()

        self.assertAlmostEqual(fit_result.value(a), 0.694915,
                               6)  # values from Mathematica
        self.assertAlmostEqual(fit_result.value(b), 0.186441, 6)
    def test_backwards_compatibility(self):
        """
        The LinearLeastSquares should give results compatible with the NumericalLeastSquare's
        and curve_fit. To do this I test here the simple analytical model also used to calibrate
        the definition of absolute_sigma.
        """
        N = 1000
        sigma = 31.4 * np.ones(N)
        xn = np.arange(N, dtype=np.float)
        yn = np.zeros_like(xn)
        np.random.seed(10)
        yn = yn + np.random.normal(size=len(yn), scale=sigma)

        a = Parameter()
        y = Variable()
        model = {y: a}

        fit = LinearLeastSquares(model,
                                 y=yn,
                                 sigma_y=sigma,
                                 absolute_sigma=False)
        fit_result = fit.execute()

        fit = NumericalLeastSquares(model,
                                    y=yn,
                                    sigma_y=sigma,
                                    absolute_sigma=False)
        num_result = fit.execute()

        popt, pcov = curve_fit(lambda x, a: a * np.ones_like(x),
                               xn,
                               yn,
                               sigma=sigma,
                               absolute_sigma=False)

        self.assertAlmostEqual(fit_result.value(a), num_result.value(a))
        self.assertAlmostEqual(fit_result.stdev(a), num_result.stdev(a))

        self.assertAlmostEqual(fit_result.value(a), popt[0], 5)
        self.assertAlmostEqual(fit_result.stdev(a), pcov[0, 0]**0.5, 5)

        fit = LinearLeastSquares(model,
                                 y=yn,
                                 sigma_y=sigma,
                                 absolute_sigma=True)
        fit_result = fit.execute()

        fit = NumericalLeastSquares(model,
                                    y=yn,
                                    sigma_y=sigma,
                                    absolute_sigma=True)
        num_result = fit.execute()

        popt, pcov = curve_fit(lambda x, a: a * np.ones_like(x),
                               xn,
                               yn,
                               sigma=sigma,
                               absolute_sigma=True)

        self.assertAlmostEqual(fit_result.value(a), num_result.value(a))
        self.assertAlmostEqual(fit_result.stdev(a), num_result.stdev(a))

        self.assertAlmostEqual(fit_result.value(a), popt[0], 5)
        self.assertAlmostEqual(fit_result.stdev(a), pcov[0, 0]**0.5, 5)