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
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
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) }
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) }
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')