def testMonteCarlo1(self): print("====== MonteCarlo 1 ===================") N = 100 ran = numpy.random ran.seed(12345) noise = ran.standard_normal(N) x = numpy.arange(N, dtype=float) - 3 nn = 0.1 for k in range(5): y = noise * nn m = PolynomialModel(0) ftr = Fitter(x, m) par = ftr.fit(y) std = ftr.getStandardDeviations() chisq = ftr.chisq mc = MonteCarlo(x, m, ftr.covariance) mc.mcycles = 1000 lmce = ftr.monteCarloError(monteCarlo=mc) print("noise : ", fmt(nn), "===========================================") print("params : ", fmt(par, format="%8.5f")) print("stdevs : ", fmt(std, format="%8.5f")) print("scale : ", fmt(ftr.scale, format="%8.5f"), fmt(nn)) print("chisq : ", fmt(chisq, format="%8.5f"), fmt(mc._eigenvalues, format="%8.5f"), fmt(mc._eigenvectors, format="%8.5f")) print("covar : ", fmt(ftr.covariance, format="%8.5f")) print("mcerr : ", fmt(lmce[0], format="%8.5f")) self.assertTrue(abs(std[0] - lmce[0]) < 0.1 * std[0]) self.assertTrue(par[0] < 0.05 * nn) nn *= 10
def testMonteCarlo2(self, doplot=False): print("====== MonteCarlo 2 ===================") x = numpy.arange(7, dtype=float) - 3 y = numpy.asarray([-1, -1, -1, 0, 1, 1, 1], dtype=float) m = PolynomialModel(1) ftr = Fitter(x, m) par = ftr.fit(y) std = ftr.getStandardDeviations() yfit = m.result(x) chisq = ftr.chisq hes = ftr.hessian # mc = MonteCarlo( x, m, chisq, hessian=hes ) mc = MonteCarlo(x, m, ftr.covariance) mc.mcycles = 1000 lmce = ftr.monteCarloError(monteCarlo=mc) print("params : ", par) print("stdevs : ", std) print("scale : ", ftr.getScale()) print("chisq : ", chisq) print("evals : ", mc._eigenvalues) print(mc._eigenvectors) print("hessi :\n", ftr.hessian) print("covar :\n", ftr.covariance) print("mcerr : ", lmce) numpy.testing.assert_array_almost_equal( par, numpy.asarray([0.0, 0.42857142857142855])) # numpy.testing.assert_array_almost_equal( std, numpy.asarray([0.1564921592871903,0.07824607964359515]) ) self.assertAlmostEqual(chisq, 0.857142857143) if doplot: pyplot.plot(x, y, 'k*') pyplot.plot(x, yfit, 'g-') pyplot.plot(x, yfit + lmce, 'r-') pyplot.plot(x, yfit - lmce, 'r-') pyplot.show()