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)
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)
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)
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)