def test_alpha(): # Test data for the alpha_k. See DLMF 8.12.14. with mp.workdps(30): alpha = [mp.mpf(0), mp.mpf(1), mp.mpf(1)/3, mp.mpf(1)/36, -mp.mpf(1)/270, mp.mpf(1)/4320, mp.mpf(1)/17010, -mp.mpf(139)/5443200, mp.mpf(1)/204120] mp_assert_allclose(compute_alpha(9), alpha)
def test_g(): # Test data for the g_k. See DLMF 5.11.4. with mp.workdps(30): g = [mp.mpf(1), mp.mpf(1)/12, mp.mpf(1)/288, -mp.mpf(139)/51840, -mp.mpf(571)/2488320, mp.mpf(163879)/209018880, mp.mpf(5246819)/75246796800] mp_assert_allclose(compute_g(7), g)
def test_d(): # Compare the d_{k, n} to the results in appendix F of [1]. # # Sources # ------- # [1] DiDonato and Morris, Computation of the Incomplete Gamma # Function Ratios and their Inverse, ACM Transactions on # Mathematical Software, 1986. with mp.workdps(50): dataset = [(0, 0, -mp.mpf('0.333333333333333333333333333333')), (0, 12, mp.mpf('0.102618097842403080425739573227e-7')), (1, 0, -mp.mpf('0.185185185185185185185185185185e-2')), (1, 12, mp.mpf('0.119516285997781473243076536700e-7')), (2, 0, mp.mpf('0.413359788359788359788359788360e-2')), (2, 12, -mp.mpf('0.140925299108675210532930244154e-7')), (3, 0, mp.mpf('0.649434156378600823045267489712e-3')), (3, 12, -mp.mpf('0.191111684859736540606728140873e-7')), (4, 0, -mp.mpf('0.861888290916711698604702719929e-3')), (4, 12, mp.mpf('0.288658297427087836297341274604e-7')), (5, 0, -mp.mpf('0.336798553366358150308767592718e-3')), (5, 12, mp.mpf('0.482409670378941807563762631739e-7')), (6, 0, mp.mpf('0.531307936463992223165748542978e-3')), (6, 12, -mp.mpf('0.882860074633048352505085243179e-7')), (7, 0, mp.mpf('0.344367606892377671254279625109e-3')), (7, 12, -mp.mpf('0.175629733590604619378669693914e-6')), (8, 0, -mp.mpf('0.652623918595309418922034919727e-3')), (8, 12, mp.mpf('0.377358774161109793380344937299e-6')), (9, 0, -mp.mpf('0.596761290192746250124390067179e-3')), (9, 12, mp.mpf('0.870823417786464116761231237189e-6'))] d = compute_d(10, 13) res = [d[k][n] for k, n, std in dataset] std = map(lambda x: x[2], dataset) mp_assert_allclose(res, std)
def test_sin(self): with mp.workdps(30): sincoeffs = mp.taylor(mp.sin, 0, 10) asincoeffs = mp.taylor(mp.asin, 0, 10) invsincoeffs = lagrange_inversion(sincoeffs) mp_assert_allclose(invsincoeffs, asincoeffs, atol=1e-30)
def test_log(self): with mp.workdps(30): logcoeffs = mp.taylor(lambda x: mp.log(1 + x), 0, 10) expcoeffs = mp.taylor(lambda x: mp.exp(x) - 1, 0, 10) invlogcoeffs = lagrange_inversion(logcoeffs) mp_assert_allclose(invlogcoeffs, expcoeffs)