Example #1
0
def test_param_rischDE():
    DE = DifferentialExtension(extension={'D': [Poly(1, x)]})
    p1, px = Poly(1, x, field=True), Poly(x, x, field=True)
    G = [(p1, px), (p1, p1), (px, p1)]  # [1/x, 1, x]
    h, A = param_rischDE(-p1, Poly(x**2, x, field=True), G, DE)
    assert len(h) == 3
    p = [hi[0].as_expr() / hi[1].as_expr() for hi in h]
    V = A.nullspace()
    assert len(V) == 2
    assert V[0] == Matrix([-1, 1, 0, -1, 1, 0])
    y = -p[0] + p[1] + 0 * p[2]  # x
    assert y.diff(x) - y / x**2 == 1 - 1 / x  # Dy + f*y == -G0 + G1 + 0*G2

    # the below test computation takes place while computing the integral
    # of 'f = log(log(x + exp(x)))'
    DE = DifferentialExtension(extension={'D': [Poly(1, x), Poly(t, t)]})
    G = [(Poly(t + x, t, domain='ZZ(x)'), Poly(1, t, domain='QQ')),
         (Poly(0, t, domain='QQ'), Poly(1, t, domain='QQ'))]
    h, A = param_rischDE(Poly(-t - 1, t, field=True), Poly(t + x,
                                                           t,
                                                           field=True), G, DE)
    assert len(h) == 5
    p = [hi[0].as_expr() / hi[1].as_expr() for hi in h]
    V = A.nullspace()
    assert len(V) == 3
    assert V[0] == Matrix([0, 0, 0, 0, 1, 0, 0])
    y = 0 * p[0] + 0 * p[1] + 1 * p[2] + 0 * p[3] + 0 * p[4]
    assert y.diff(t) - y / (t + x) == 0  # Dy + f*y = 0*G0 + 0*G1
Example #2
0
def test_param_rischDE():
    DE = DifferentialExtension(extension={'D': [Poly(1, x)]})
    p1, px = Poly(1, x, field=True), Poly(x, x, field=True)
    G = [(p1, px), (p1, p1), (px, p1)]  # [1/x, 1, x]
    h, A = param_rischDE(-p1, Poly(x**2, x, field=True), G, DE)
    assert len(h) == 3
    p = [hi[0].as_expr()/hi[1].as_expr() for hi in h]
    V = A.nullspace()
    assert len(V) == 2
    assert V[0] == Matrix([-1, 1, 0, -1, 1, 0])
    y = -p[0] + p[1] + 0*p[2]  # x
    assert y.diff(x) - y/x**2 == 1 - 1/x  # Dy + f*y == -G0 + G1 + 0*G2

    # the below test computation takes place while computing the integral
    # of 'f = log(log(x + exp(x)))'
    DE = DifferentialExtension(extension={'D': [Poly(1, x), Poly(t, t)]})
    G = [(Poly(t + x, t, domain='ZZ(x)'), Poly(1, t, domain='QQ')), (Poly(0, t, domain='QQ'), Poly(1, t, domain='QQ'))]
    h, A = param_rischDE(Poly(-t - 1, t, field=True), Poly(t + x, t, field=True), G, DE)
    assert len(h) == 5
    p = [hi[0].as_expr()/hi[1].as_expr() for hi in h]
    V = A.nullspace()
    assert len(V) == 3
    assert V[0] == Matrix([0, 0, 0, 0, 1, 0, 0])
    y = 0*p[0] + 0*p[1] + 1*p[2] + 0*p[3] + 0*p[4]
    assert y.diff(t) - y/(t + x) == 0   # Dy + f*y = 0*G0 + 0*G1
Example #3
0
def test_solve_for_functions_derivatives():
    t = Symbol('t')
    x = Function('x')(t)
    y = Function('y')(t)
    a11, a12, a21, a22, b1, b2 = symbols('a11,a12,a21,a22,b1,b2')

    soln = solve([a11 * x + a12 * y - b1, a21 * x + a22 * y - b2], x, y)
    assert soln == {
        x: (a22 * b1 - a12 * b2) / (a11 * a22 - a12 * a21),
        y: (a11 * b2 - a21 * b1) / (a11 * a22 - a12 * a21),
    }

    assert solve(x - 1, x) == [1]
    assert solve(3 * x - 2, x) == [Rational(2, 3)]

    soln = solve([
        a11 * x.diff(t) + a12 * y.diff(t) - b1,
        a21 * x.diff(t) + a22 * y.diff(t) - b2
    ], x.diff(t), y.diff(t))
    assert soln == {
        y.diff(t): (a11 * b2 - a21 * b1) / (a11 * a22 - a12 * a21),
        x.diff(t): (a22 * b1 - a12 * b2) / (a11 * a22 - a12 * a21)
    }

    assert solve(x.diff(t) - 1, x.diff(t)) == [1]
    assert solve(3 * x.diff(t) - 2, x.diff(t)) == [Rational(2, 3)]

    eqns = set((3 * x - 1, 2 * y - 4))
    assert solve(eqns, set((x, y))) == {x: Rational(1, 3), y: 2}
    x = Symbol('x')
    f = Function('f')
    F = x**2 + f(x)**2 - 4 * x - 1
    assert solve(F.diff(x), diff(f(x), x)) == [(-x + 2) / f(x)]

    # Mixed cased with a Symbol and a Function
    x = Symbol('x')
    y = Function('y')(t)

    soln = solve(
        [a11 * x + a12 * y.diff(t) - b1, a21 * x + a22 * y.diff(t) - b2], x,
        y.diff(t))
    assert soln == {
        y.diff(t): (a11 * b2 - a21 * b1) / (a11 * a22 - a12 * a21),
        x: (a22 * b1 - a12 * b2) / (a11 * a22 - a12 * a21)
    }
Example #4
0
def test_solve_for_functions_derivatives():
    t = Symbol('t')
    x = Function('x')(t)
    y = Function('y')(t)
    a11, a12, a21, a22, b1, b2 = symbols('a11,a12,a21,a22,b1,b2')

    soln = solve([a11*x + a12*y - b1, a21*x + a22*y - b2], x, y)
    assert soln == {
        x: (a22*b1 - a12*b2)/(a11*a22 - a12*a21),
        y: (a11*b2 - a21*b1)/(a11*a22 - a12*a21),
    }

    assert solve(x - 1, x) == [1]
    assert solve(3*x - 2, x) == [Rational(2, 3)]

    soln = solve([a11*x.diff(t) + a12*y.diff(t) - b1, a21*x.diff(t) +
            a22*y.diff(t) - b2], x.diff(t), y.diff(t))
    assert soln == { y.diff(t): (a11*b2 - a21*b1)/(a11*a22 - a12*a21),
            x.diff(t): (a22*b1 - a12*b2)/(a11*a22 - a12*a21) }

    assert solve(x.diff(t) - 1, x.diff(t)) == [1]
    assert solve(3*x.diff(t) - 2, x.diff(t)) == [Rational(2, 3)]

    eqns = set((3*x - 1, 2*y - 4))
    assert solve(eqns, set((x, y))) == { x: Rational(1, 3), y: 2 }
    x = Symbol('x')
    f = Function('f')
    F = x**2 + f(x)**2 - 4*x - 1
    assert solve(F.diff(x), diff(f(x), x)) == [(-x + 2)/f(x)]

    # Mixed cased with a Symbol and a Function
    x = Symbol('x')
    y = Function('y')(t)

    soln = solve([a11*x + a12*y.diff(t) - b1, a21*x +
            a22*y.diff(t) - b2], x, y.diff(t))
    assert soln == { y.diff(t): (a11*b2 - a21*b1)/(a11*a22 - a12*a21),
            x: (a22*b1 - a12*b2)/(a11*a22 - a12*a21) }
Example #5
0
import numpy as np
import sympy
from sympy.abc import y, x
import matplotlib.pyplot as plt

c = sympy.var('c1, c2, c3')

A = np.zeros((len(c), len(c)))
B = np.zeros(len(c))
for i in range(len(c)):
    weights = x**(i + 1) * (x - 1)**(i + 1)
    b = -2 * x * (1 - x)
    B[i] = sympy.integrate(weights * b, [x, 0, 1]).simplify()
    for j in range(len(c)):
        y = x**(j + 1) * (x - 1)**(j + 1)
        yx = y.diff(x)
        yxx = yx.diff(x)
        a = yxx + y
        A[i, j] = sympy.integrate(weights * a, [x, 0, 1]).simplify()

csol = np.linalg.solve(A, B)

x = np.linspace(0, 1.)
y = 0
for i, ci in enumerate(csol):
    y += ci * x**(i + 1) * (x - 1)**(i + 1)

plt.plot(x, y, 'k-')
plt.savefig('galerkin_example.png', bbox_inches='tight')
import numpy as np
import sympy
from sympy.abc import y, x
import matplotlib.pyplot as plt

c = sympy.var('c1, c2, c3')

A = np.zeros((len(c), len(c)))
B = np.zeros(len(c))
for i in range(len(c)):
    weights = x**(i+1)*(x-1)**(i+1)
    b = -2*x*(1-x)
    B[i] = sympy.integrate(weights*b, [x, 0, 1]).simplify()
    for j in range(len(c)):
        y = x**(j+1)*(x-1)**(j+1)
        yx = y.diff(x)
        yxx = yx.diff(x)
        a = yxx + y
        A[i, j] = sympy.integrate(weights*a, [x, 0, 1]).simplify()

csol = np.linalg.solve(A, B)

x = np.linspace(0, 1.)
y = 0
for i, ci in enumerate(csol):
    y += ci*x**(i+1)*(x-1)**(i+1)

plt.plot(x, y, 'k-')
plt.savefig('galerkin_example.png', bbox_inches='tight')