def test_integral_expressions_against_real_hamiltonian(self):
        extractor = IntegralExtractor(self.hill.alg)
        extractor.set_complex_normal_hamiltonian(self.hill.k_dc)
        extractor.find_lost_simple_integrals_and_non_simple_integral()
        extractor.list_the_simple_integrals()
        extractor.express_simple_part_as_polynomial_over_all_integrals()
        extractor.express_both_parts_as_polynomial_over_all_integrals()
        extractor.express_all_integrals_in_normal_form_coords()
        k_dc_in_ints = extractor._total_in_integrals
        ints_in_coords = extractor._integrals_in_coords
        r_ints_in_coords = [
            one_int.substitute(self.hill.sub_r_into_c)
            for one_int in ints_in_coords
        ]
        res = Polynomial(6)
        for po, co in k_dc_in_ints.powers_and_coefficients():
            tmp = Polynomial.One(6)
            for i, po_i in enumerate(po):
                if po_i > 0:
                    tmp *= (r_ints_in_coords[i]**po_i)
            res += co * tmp
        eval_at_ints = res

        diff = eval_at_ints - self.hill.k_dr
        self.assert_(diff.l_infinity_norm() < 1.0e-15, diff)

        eval_at_ints = k_dc_in_ints.substitute(r_ints_in_coords)
        diff = eval_at_ints - self.hill.k_dr
        self.assert_(diff.l_infinity_norm() < 1.0e-15, diff)
Пример #2
0
 def one(self):
     return Polynomial.One(self.n_vars())