def test_SumApprox_monotone_terms(): x, y, z = symbols('x y z') expr1 = exp(z) * (x**2 + y**2 + 1) bnds1 = {x: (0, 1e-3), y: (100, 1000)} sum_approx_m2 = SumApprox(bounds=bnds1, reltol=1e-2) sum_approx_m5 = SumApprox(bounds=bnds1, reltol=1e-5) sum_approx_m11 = SumApprox(bounds=bnds1, reltol=1e-11) assert (optimize(expr1, [sum_approx_m2]) / exp(z) - (y**2)).simplify() == 0 assert (optimize(expr1, [sum_approx_m5]) / exp(z) - (y**2 + 1)).simplify() == 0 assert (optimize(expr1, [sum_approx_m11]) / exp(z) - (y**2 + 1 + x**2)).simplify() == 0
def test_SumApprox_trivial(): x = symbols('x') expr1 = 1 + x sum_approx = SumApprox(bounds={x: (-1e-20, 1e-20)}, reltol=1e-16) apx1 = optimize(expr1, [sum_approx]) assert apx1 - 1 == 0