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
So the complete final answer is: 3e^t[[1],[1]] + e^{-t}[[1],[-1]]
How could I solve this with SymPy?
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:
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]