def generate_integration_tests(): def print_(f, msg): f.write("\t" + msg + "\n") integrators_names = {"gauss_kronrod": "gauss_kronrod()", "simplex": "simplex()", "gauss_legendre": "gauss_legendre()", "gauss_lobatto": "gauss_lobatto()", "simplex_steps_1000": "simplex(steps=1000)", "gauss_legendre_steps_500": "gauss_legendre(steps=500)", "gauss_lobatto_max_iter_127": "gauss_lobatto(max_number_of_iterations = 255, abs_tolerance = 1.0e-7)", "gauss_kronrod_check_rel_tolerance": "gauss_kronrod(check_abs_tolerance = False, check_rel_tolerance = True)", "gauss_kronrod_check_abs_tolerance_check_rel_tolerance": "gauss_kronrod(check_abs_tolerance = True, check_rel_tolerance = True)" } fcts_names = ("lambda x:2", "lambda x:x*x", "lambda x:exp(-x*x)", "lambda x: x*x*x if x > 1 else x-2") integrators = {'gauss_legendre': gauss_legendre(), 'gauss_lobatto': gauss_lobatto(), 'simplex_steps_1000': simplex(steps=1000), 'simplex': simplex(), 'gauss_kronrod': gauss_kronrod(), 'gauss_legendre_steps_500': gauss_legendre(steps=500), 'gauss_kronrod_check_abs_tolerance_check_rel_tolerance': gauss_kronrod(check_abs_tolerance=True, check_rel_tolerance=True), 'gauss_lobatto_max_iter_127': gauss_lobatto(max_number_of_iterations=255, abs_tolerance=1.0e-7), 'gauss_kronrod_check_rel_tolerance': gauss_kronrod(check_abs_tolerance=False, check_rel_tolerance=True)} fcts = (lambda x: 2, lambda x: x * x, lambda x: exp(-x * x), lambda x: x * x * x if x > 1 else x - 2) ''' s = [] for int_name, i in integrators_names.items(): s.append("'" + int_name + "':" + i) print("integrators = {" + ", ".join(s) + "}") print("fcts = (" + ", ".join(fcts_names) + ")") ''' integration_boundaries = ((-1.0, 2.0), (0.0, 1.0), (-100.0, 99.0)) file_name = r"/Users/MarcusSteinkamp/Documents/integrator_test_code.txt" fi = open(file_name, "w") c = 0 i_fct = 0 for n, i in integrators_names.items(): i_fct = 0 for f in fcts_names: for l, u in integration_boundaries: print_(fi, "def test_integrator_" + str(c).zfill(3) + "_" + n + "(self):") print_(fi, "\tfct = " + f) print_(fi, "\tintegrator = " + i) print_(fi, "\tresult = integrator(fct, " + str(l) + ", " + str(u) + ")") print_(fi, "\tbenchmark = " + "{:18.9f}".format(integrators[n](fcts[i_fct], l, u))) print_(fi, "\tself.assertAlmostEqual(benchmark, result, 8)") print_(fi, "") c = c + 1 i_fct = i_fct + 1
def test_integrator_compare(self): i0 = simplex(steps=5000) i1 = gauss_kronrod() # i2 = gauss_legendre(steps = 1000) # gauss_legendre calculates bad. i3 = gauss_lobatto() fct = lambda x: cos(x) l = 0 u = PI / 2.0 r0 = i0(fct, l, u) r1 = i1(fct, l, u) # r2 = i2(fct, l, u) r3 = i3(fct, l, u) benchmark = 1.0 self.assertAlmostEqual(r0, benchmark, 6) self.assertAlmostEqual(r1, benchmark, 6) self.assertAlmostEqual(r3, benchmark, 6)
def test_integrator_046_simplex(self): fct = lambda x: x * x * x if x > 1 else x - 2 integrator = simplex() result = integrator(fct, 0.0, 1.0) benchmark = -1.5 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_044_simplex(self): fct = lambda x: exp(-x * x) integrator = simplex() result = integrator(fct, -100.0, 99.0) benchmark = 1.76997318866 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_045_simplex(self): fct = lambda x: x * x * x if x > 1 else x - 2 integrator = simplex() result = integrator(fct, -1.0, 2.0) benchmark = -0.23912601 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_042_simplex(self): fct = lambda x: exp(-x * x) integrator = simplex() result = integrator(fct, -1.0, 2.0) benchmark = 1.62884484614 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_043_simplex(self): fct = lambda x: exp(-x * x) integrator = simplex() result = integrator(fct, 0.0, 1.0) benchmark = 0.746818001468 self.assertAlmostEqual(benchmark, result, 8)
def test_simplex_1(self): result = simplex(steps=1000)(self._init_polynom(), -4.0, 5.0) self.assertAlmostEqual(802.8051029980307, result, 10)
def test_integrator_030_simplex_steps_1000(self): fct = lambda x: exp(-x * x) integrator = simplex(steps=1000) result = integrator(fct, -1.0, 2.0) benchmark = 1.62890491681 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_038_simplex(self): fct = lambda x: 2 integrator = simplex() result = integrator(fct, -100.0, 99.0) benchmark = 398.0 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_039_simplex(self): fct = lambda x: x * x integrator = simplex() result = integrator(fct, -1.0, 2.0) benchmark = 3.00045 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_035_simplex_steps_1000(self): fct = lambda x: x * x * x if x > 1 else x - 2 integrator = simplex(steps=1000) result = integrator(fct, -100.0, 99.0) benchmark = 24009795.547195956 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_037_simplex(self): fct = lambda x: 2 integrator = simplex() result = integrator(fct, 0.0, 1.0) benchmark = 2.0 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_033_simplex_steps_1000(self): fct = lambda x: x * x * x if x > 1 else x - 2 integrator = simplex(steps=1000) result = integrator(fct, -1.0, 2.0) benchmark = -0.248991251001 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_032_simplex_steps_1000(self): fct = lambda x: exp(-x * x) integrator = simplex(steps=1000) result = integrator(fct, -100.0, 99.0) benchmark = 1.77245385091 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_031_simplex_steps_1000(self): fct = lambda x: exp(-x * x) integrator = simplex(steps=1000) result = integrator(fct, 0.0, 1.0) benchmark = 0.746824071499 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_047_simplex(self): fct = lambda x: x * x * x if x > 1 else x - 2 integrator = simplex() result = integrator(fct, -100.0, 99.0) benchmark = 24019401.98376875 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_025_simplex_steps_1000(self): fct = lambda x: 2 integrator = simplex(steps=1000) result = integrator(fct, 0.0, 1.0) benchmark = 2.0 self.assertAlmostEqual(benchmark, result, 8)
def test_simplex_0(self): result = simplex(steps=1000)(lambda x: x * x, -1.0, 1.0) self.assertAlmostEqual(0.6666679999999994, result, 10)
def test_integrator_041_simplex(self): fct = lambda x: x * x integrator = simplex() result = integrator(fct, -100.0, 99.0) benchmark = 656897.67665 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_040_simplex(self): fct = lambda x: x * x integrator = simplex() result = integrator(fct, 0.0, 1.0) benchmark = 0.33335 self.assertAlmostEqual(benchmark, result, 8)
def test_integrator_029_simplex_steps_1000(self): fct = lambda x: x * x integrator = simplex(steps=1000) result = integrator(fct, -100.0, 99.0) benchmark = 656767.6467664994 self.assertAlmostEqual(benchmark, result, 8)