def test_cash_karp(self): a = RKcashKarp.phi() b = inverse(a) c = composition_ssa(a, b) result = equal_up_to_order(c, unit, self.max_order) self.assertEqual(result, self.max_order) c = composition_ssa(b, a) result = equal_up_to_order(c, unit, self.max_order) self.assertEqual(result, self.max_order)
def test_explicit_euler(self): a = RKeuler.phi() b = inverse(a) c = composition_ssa(a, b) result = equal_up_to_order(c, unit, self.max_order) self.assertEqual(result, self.max_order) c = composition_ssa(b, a) result = equal_up_to_order(c, unit, self.max_order) self.assertEqual(result, self.max_order)
def test_exact(self): a = exponential b = inverse(a) c = composition_ssa(a, b) result = equal_up_to_order(c, unit, self.max_order) self.assertEqual(result, self.max_order) c = composition_ssa(b, a) result = equal_up_to_order(c, unit, self.max_order) self.assertEqual(result, self.max_order)
def test_no_2(self): max_order = 5 trapezoidal = RKimplicitTrapezoidal.phi() imp_midpoint = RKimplicitMidpoint.phi() half_imp_euler = stepsize_adjustment(RKimplicitEuler.phi(), Fraction(1, 2)) # half_exp_euler = stepsize_adjustment(RKeuler.phi(),\ # Fraction(1, 2)) the_conjugate = conjugate_by_commutator(imp_midpoint, half_imp_euler) equal_up_to_order(trapezoidal, the_conjugate, max_order)
def test_exp_explicit_euler(self): a = RKeuler.phi() alpha_1 = log(a) a_1 = exp(alpha_1) result = equal_up_to_order(a, a_1, self.max_order) self.assertEqual(self.max_order, result) alpha_2 = modified_equation(a) result = equal_up_to_order(alpha_1, alpha_2, self.max_order) self.assertEqual(self.max_order, result) a_2 = exp(alpha_2) result = equal_up_to_order(a, a_2, self.max_order) self.assertEqual(self.max_order, result)
def test_composition(self): "It is known that the explicit and implicit Euler methods are adjoint.\ Furthermore, the composition implicit o explicit = trapezoidal,\ and explicit o implicit = implicit midpoint.\ This verifies the coproduct." max_order = 5 explicit_euler = RKeuler.phi() implicit_euler = RKimplicitEuler.phi() implicit_midpoint = RKimplicitMidpoint.phi() implicit_trapezoidal = RKimplicitTrapezoidal.phi() result1 = composition_ssa(explicit_euler, implicit_euler) tmp = equal_up_to_order(result1, implicit_trapezoidal, max_order) self.assertEqual(tmp, max_order) result2 = composition_ssa(implicit_euler, explicit_euler) tmp = equal_up_to_order(result2, implicit_midpoint, max_order) self.assertEqual(tmp, max_order)
def order(self): # a = exponential b = self.phi() return equal_up_to_order(exponential, b)
def test(self): modified = modified_equation(exponential) result = equal_up_to_order(modified, unit_field, 8) self.assertEqual(8, result)
def test_implicit_euler(self): a = RKimplicitEuler.phi() b = adjoint(a) result = equal_up_to_order(b, RKeuler.phi(), self.max_order) self.assertEqual(result, self.max_order)
def test_lobattoB(self): # symmetric a = RKlobattoIIIB4.phi() b = adjoint(a) result = equal_up_to_order(a, b, self.max_order) self.assertEqual(result, self.max_order)
def test_implicit_midpoint(self): # symmetric a = RKimplicitMidpoint.phi() b = adjoint(a) result = equal_up_to_order(a, b, self.max_order) self.assertEqual(result, self.max_order)
def test_exact(self): # symmetric a = exponential b = adjoint(a) result = equal_up_to_order(a, b, self.max_order) self.assertEqual(result, self.max_order)