Example #1
0
def test_issue_6966():
    i, k, m = symbols('i k m', integer=True)
    z_i, q_i = symbols('z_i q_i')
    a_k = Sum(-q_i*z_i/k,(i,1,m))
    b_k = a_k.diff(z_i)
    assert isinstance(b_k, Sum)
    assert b_k == Sum(-q_i/k,(i,1,m))
Example #2
0
def series_small_a():
    """Tylor series expansion of Phi(a, b, x) in a=0 up to order 5.
    """
    order = 5
    a, b, x, k = symbols("a b x k")
    A = []  # terms with a
    X = []  # terms with x
    B = []  # terms with b (polygammas)
    # Phi(a, b, x) = exp(x)/gamma(b) * sum(A[i] * X[i] * B[i])
    expression = Sum(x**k / factorial(k) / gamma(a * k + b),
                     (k, 0, S.Infinity))
    expression = gamma(b) / sympy.exp(x) * expression

    # nth term of taylor series in a=0: a^n/n! * (d^n Phi(a, b, x)/da^n at a=0)
    for n in range(0, order + 1):
        term = expression.diff(a, n).subs(a, 0).simplify().doit()
        # set the whole bracket involving polygammas to 1
        x_part = (term.subs(polygamma(0, b),
                            1).replace(polygamma, lambda *args: 0))
        # sign convetion: x part always positive
        x_part *= (-1)**n

        A.append(a**n / factorial(n))
        X.append(horner(x_part))
        B.append(horner((term / x_part).simplify()))

    s = "Tylor series expansion of Phi(a, b, x) in a=0 up to order 5.\n"
    s += "Phi(a, b, x) = exp(x)/gamma(b) * sum(A[i] * X[i] * B[i], i=0..5)\n"
    for name, c in zip(['A', 'X', 'B'], [A, X, B]):
        for i in range(len(c)):
            s += f"\n{name}[{i}] = " + str(c[i])
    return s
Example #3
0
def test_eval_diff():
    assert Sum(x, (x, 1, 2)).diff(x) == 0
    assert Sum(x * y, (x, 1, 2)).diff(x) == 0
    assert Sum(x * y, (y, 1, 2)).diff(x) == Sum(y, (y, 1, 2))
    e = Sum(x * y, (x, 1, a))
    assert e.diff(a) == Derivative(e, a)
    assert Sum(x * y, (x, 1, 3), (a, 2, 5)).diff(y) == Sum(x * y, (x, 1, 3), (a, 2, 5)).doit().diff(y) == 24
Example #4
0
def test_eval_diff():
    assert Sum(x, (x, 1, 2)).diff(x) == 0
    assert Sum(x * y, (x, 1, 2)).diff(x) == 0
    assert Sum(x * y, (y, 1, 2)).diff(x) == Sum(y, (y, 1, 2))
    e = Sum(x * y, (x, 1, a))
    assert e.diff(a) == Derivative(e, a)
    assert Sum(x*y, (x, 1, 3), (a, 2, 5)).diff(y) == \
        Sum(x*y, (x, 1, 3), (a, 2, 5)).doit().diff(y) == 24
plt.loglog(Ns, [psf_to_sigma(g15, N, 0, 0) for N in Ns])
plt.loglog(Ns, [psf_to_sigma(airy, N, 0, 0) for N in Ns])
plt.loglog(Ns, [psf_to_sigma(img, N, 0, 0) for N in Ns])

# %%
from sympy import Function, Sum, symbols, ln, Eq
from sympy.abc import N, i

η, ζ = symbols('ζ,η')

P = Function('P')(ζ, η)
l = Sum(ln(P), (i, 1, N))
l

# %%
l.diff(η, 2).simplify()

# %%
(l.diff(η, 1) ** 2).simplify()

# %%
from astropy.modeling.functional_models import Gaussian1D


# %%
def fisher(pdf_grid, dx):
    normed = pdf_grid / np.trapz(pdf_grid, dx=dx)

    grad = np.gradient(normed, dx)

    return np.trapz(grad ** 2 / normed, dx=dx)