def test2grid_minimize(self): """ I sigproc.fit.Minimizer Jacobian grid_minimize """ result = fit.grid_minimize(self.x, self.y, self.model, points=100) names = self.model.parameters.name val = self.model.parameters.value err = self.model.parameters.stderr valr = [2.4272, 1.2912, 0.4928] errr = [0.4345, 0.3796, 0.0921] print(self.model.param2str(accuracy=4, output='result')) msg = 'Resulting value for {:s} is not correct within {:.0f}\%' pc = 0.05 # 5% difference is allowed for i in range(3): self.assertAlmostEqual(val[i], valr[i], delta=pc * valr[i], msg=msg.format(names[i], pc * 100)) msg = 'Resulting std-error for {:s} is not correct within {:.0f}\%' pc = 0.1 # 10% difference is allowed for i in range(3): self.assertAlmostEqual(err[i], errr[i], delta=pc * errr[i], msg=msg.format(names[i], pc * 100))
def test2grid_minimize(self): """ I sigproc.fit.Minimizer Function grid_minimize """ model = self.model points = 100 fitters, newmodels, chisqrs = fit.grid_minimize(self.x, self.y, model, parameters=self.pnames, points=points, return_all=True, verbose=False) values = newmodels[0].get_parameters()[0] pars1 = [mod_.parameters['ampl'] for mod_ in newmodels] msg = 'Not correct amount of fitting points' self.assertEqual(len(fitters), points, msg=msg) self.assertEqual(len(newmodels), points, msg=msg) self.assertEqual(len(chisqrs), points, msg=msg) msg = 'Parameters not well distributed' for i, j in zip(np.random.randint(0,points, size=50), np.random.randint(0,points, size=50)): if i != j: self.assertNotEqual(pars1[i], pars1[j], msg=msg) msg = 'Chi2 is not ordened correctly' self.assertTrue(chisqrs[0] == np.min(chisqrs), msg=msg) self.assertTrue(np.all(np.diff(chisqrs) >= 0), msg=msg) msg = 'Fit did not converge to the correct values' self.assertArrayAlmostEqual(values[0:2], self.value[0:2], places=2, msg=msg)
def test2grid_minimize(self): """ I sigproc.fit.Minimizer Function grid_minimize """ model = self.model points = 100 fitters, newmodels, chisqrs = fit.grid_minimize(self.x, self.y, model, parameters=self.pnames, points=points, return_all=True, verbose=False) values = newmodels[0].get_parameters()[0] pars1 = [mod_.parameters['ampl'] for mod_ in newmodels] msg = 'Not correct amount of fitting points' self.assertEqual(len(fitters), points, msg=msg) self.assertEqual(len(newmodels), points, msg=msg) self.assertEqual(len(chisqrs), points, msg=msg) msg = 'Parameters not well distributed' for i, j in zip(np.random.randint(0, points, size=50), np.random.randint(0, points, size=50)): if i != j: self.assertNotEqual(pars1[i], pars1[j], msg=msg) msg = 'Chi2 is not ordened correctly' self.assertTrue(chisqrs[0] == np.min(chisqrs), msg=msg) self.assertTrue(np.all(np.diff(chisqrs) >= 0), msg=msg) msg = 'Fit did not converge to the correct values' self.assertArrayAlmostEqual(values[0:2], self.value[0:2], places=2, msg=msg)
def test2grid_minimize(self): """ I sigproc.fit.Minimizer Jacobian grid_minimize """ result = fit.grid_minimize(self.x, self.y, self.model, points=100) names = self.model.parameters.name val = self.model.parameters.value err = self.model.parameters.stderr valr = [2.4272, 1.2912, 0.4928] errr = [0.4345, 0.3796, 0.0921] print self.model.param2str(accuracy=4, output='result') msg = 'Resulting value for {:s} is not correct within {:.0f}\%' pc = 0.05 # 5% difference is allowed for i in range(3): self.assertAlmostEqual(val[i], valr[i], delta = pc*valr[i], msg=msg.format(names[i], pc*100)) msg = 'Resulting std-error for {:s} is not correct within {:.0f}\%' pc = 0.1 # 10% difference is allowed for i in range(3): self.assertAlmostEqual(err[i], errr[i], delta = pc*errr[i], msg=msg.format(names[i], pc*100))