def test_fitting(self): xdata = np.linspace(1,10,10) ydata = 3*xdata**2 a = Parameter() #3.1, min=2.5, max=3.5 b = Parameter() x = Variable() new = a*x**b fit = NumericalLeastSquares(new, xdata, ydata) self.assertTrue(issubclass(fit.model.chi_squared.__class__, sympy.Expr)) self.assertTrue(issubclass(fit.model.chi.__class__, sympy.Expr)) self.assertTrue(type(fit.model.numerical_chi_squared) is types.LambdaType) self.assertTrue(type(fit.model.numerical_chi) is types.LambdaType) fit_result = fit.execute() self.assertIsInstance(fit_result, FitResults) self.assertAlmostEqual(fit_result.params.a, 3.0) self.assertAlmostEqual(fit_result.params.b, 2.0) self.assertIsInstance(fit_result.params.a_stdev, float) self.assertIsInstance(fit_result.params.b_stdev, float) self.assertIsInstance(fit_result.r_squared, float) self.assertEqual(fit_result.r_squared, 1.0) # by definition since there's no fuzzyness # Test several illegal ways to access the data. self.assertRaises(AttributeError, getattr, *[fit_result.params, 'a_fdska']) self.assertRaises(AttributeError, getattr, *[fit_result.params, 'c']) self.assertRaises(AttributeError, getattr, *[fit_result.params, 'a_stdev_stdev']) self.assertRaises(AttributeError, getattr, *[fit_result.params, 'a_stdev_']) self.assertRaises(AttributeError, getattr, *[fit_result.params, 'a__stdev'])
def test_fitting(self): xdata = np.linspace(1,10,10) ydata = 3*xdata**2 a = Parameter() #3.1, min=2.5, max=3.5 b = Parameter() x = Variable() new = a*x**b fit = NumericalLeastSquares(new, xdata, ydata) fit_result = fit.execute() self.assertIsInstance(fit_result, FitResults) self.assertAlmostEqual(fit_result.params.a, 3.0) self.assertAlmostEqual(fit_result.params.b, 2.0) self.assertIsInstance(fit_result.params.a_stdev, float) self.assertIsInstance(fit_result.params.b_stdev, float) self.assertIsInstance(fit_result.r_squared, float) self.assertEqual(fit_result.r_squared, 1.0) # by definition since there's no fuzzyness # Test several false ways to access the data. self.assertRaises(AttributeError, getattr, *[fit_result.params, 'a_fdska']) self.assertRaises(AttributeError, getattr, *[fit_result.params, 'c']) self.assertRaises(AttributeError, getattr, *[fit_result.params, 'a_stdev_stdev']) self.assertRaises(AttributeError, getattr, *[fit_result.params, 'a_stdev_']) self.assertRaises(AttributeError, getattr, *[fit_result.params, 'a__stdev'])
def test_vector_none_fitting(self): """ Fit to a vector model with one var's data set to None """ a, b, c = parameters('a, b, c') a_i, b_i, c_i = variables('a_i, b_i, c_i') model = {a_i: a, b_i: b, c_i: c} xdata = np.array([ [10.1, 9., 10.5, 11.2, 9.5, 9.6, 10.], [102.1, 101., 100.4, 100.8, 99.2, 100., 100.8], [71.6, 73.2, 69.5, 70.2, 70.8, 70.6, 70.1], ]) fit_none = NumericalLeastSquares( model=model, a_i=xdata[0], b_i=xdata[1], c_i=None, ) fit = NumericalLeastSquares( model=model, a_i=xdata[0], b_i=xdata[1], c_i=xdata[2], ) fit_none_result = fit_none.execute() fit_result = fit.execute() self.assertAlmostEqual(fit_none_result.params.a, fit_result.params.a, 4) self.assertAlmostEqual(fit_none_result.params.b, fit_result.params.b, 4) self.assertAlmostEqual(fit_none_result.params.c, 1.0)
def test_named_fitting(self): xdata = np.linspace(1,10,10) ydata = 3*xdata**2 a = Parameter(1.0) b = Parameter(2.5) x, y = variables('x, y') model = {y: a*x**b} fit = NumericalLeastSquares(model, x=xdata, y=ydata) fit_result = fit.execute() self.assertIsInstance(fit_result, FitResults) self.assertAlmostEqual(fit_result.params.a, 3.0) self.assertAlmostEqual(fit_result.params.b, 2.0)
def test_vector_fitting(self): a, b, c = parameters('a, b, c') a_i, b_i, c_i = variables('a_i, b_i, c_i') model = {a_i: a, b_i: b, c_i: c} xdata = np.array([ [10.1, 9., 10.5, 11.2, 9.5, 9.6, 10.], [102.1, 101., 100.4, 100.8, 99.2, 100., 100.8], [71.6, 73.2, 69.5, 70.2, 70.8, 70.6, 70.1], ]) fit = NumericalLeastSquares( model=model, a_i=xdata[0], b_i=xdata[1], c_i=xdata[2], ) fit_result = fit.execute() self.assertAlmostEqual(fit_result.params.a, 9.985691, 6) self.assertAlmostEqual(fit_result.params.b, 1.006143e+02, 4) self.assertAlmostEqual(fit_result.params.c, 7.085713e+01, 5)