pythonmatrixsympylinear-algebradifferential-equations

Solving a simple matrix differential equation


I want to use Sympy to solve the differential matrix equation: du/dt = [[0,1],[1,0]]u with initial value u(0) = [[4],[2]].

The answer is

enter image description here enter image description here

So the complete final answer is: 3e^t[[1],[1]] + e^{-t}[[1],[-1]]

How could I solve this with SymPy?


Solution

  • This can be achieved with dsolve_system:

    Code:

    from sympy import symbols, Eq, Function, init_printing
    from sympy.solvers.ode.systems import dsolve_system
    
    init_printing()
    
    u1, u2 = symbols("u1 u2", cls=Function)
    t = symbols("t")
    
    
    eqs = [
        Eq(u1(t).diff(t), u2(t)),
        Eq(u2(t).diff(t), u1(t))
    ]
    
    funcs = [u1(t), u2(t)]
    solutions = dsolve_system(eqs, ics={u1(0): 4, u2(0): 2})
    solutions[0]
    

    Output:

    enter image description here

    Output in latex:

    \left[ u_{1}{\left(t \right)} = 3 e^{t} + e^{- t}, \  u_{2}{\left(t \right)} = 3 e^{t} - e^{- t}\right]
    

    Edit For a general matrix, you can write this:

    import numpy as np
    
    from sympy import symbols, Eq, Function, init_printing
    from sympy.solvers.ode.systems import dsolve_system
    
    init_printing()
    
    # Replace with your matrix
    A = np.array([
        [0, 1],
        [1, 0]
    ])
    initial_condition = np.array([4, 2])
    
    # Defines the symbols to be used
    u = [Function(f'u{i}') for i in range(A.shape[0])]
    t = symbols("t")
    
    # Write the expression for the system of differential equations
    eqs = []
    for i, row in enumerate(A):
        rhs = 0
        for j, coeff in enumerate(row):
            rhs += coeff * u[j](t)
    
        eqs.append(Eq(u[i](t).diff(t), rhs))
    
    # Solves the system of differential equations
    ics = {u[i](0): val for i, val in enumerate(initial_condition)}
    solutions = dsolve_system(eqs, ics=ics)
    
    solutions[0]