Come risolvere un'equazione differenziale in Python

Per risolvere le equazioni differenziali di ogni ordine in Python è molto utile il modulo SymPy dedicato al calcolo simbolico.

Inizio importando le funzioni della libreria librerie necessarie:

from sympy import symbols, Function, Eq, dsolve

Poi decido qual è la funzione e le variabili coinvolte nell'equazione differenziale rispettivamente tramite le funzioni Function() e symbols().

Ad esempio, se sto lavorando con il tempo \( t \) e una funzione \( y(t) \) scrivo:

t = symbols('t')
y = Function('y')(t)

Questi due comandi associano un simbolo alla variabile t e alla variabile y. In questo modo Python interpreterà queste due variabili come simboli anziché come valori numerici.

A questo punto scrivo l'equazione differenziale che voglio risolvere.

Prendo l'esempio di un'equazione differenziale del terzo ordine:

\[ \frac{d^3y}{dt^3} - 3\frac{d^2y}{dt^2} + 3\frac{dy}{dt} - y = 0 \]

In SymPy, la scrivo così:

ode = Eq(y.diff(t, 3) - 3*y.diff(t, 2) + 3*y.diff(t) - y, 0)

Dove diff(t,n) è la funzione della derivata di ordine n rispetto alla variabile t.

  • y.diff(t,3) è la derivata terza della funzione y rispetto alla variabile t
  • y.diff(t,2) è la derivata seconda della funzione y rispetto alla variabile t
  • y.diff(t) è la derivata prima della funzione y rispetto alla variabile t
  • y è la funzione non derivata

Ora, uso dsolve() per risolvere l'equazione.

La funzione dsolve() prende l'equazione e la funzione che sto risolvendo come argomenti:

solution = dsolve(ode, y)

Infine, visualizzo la soluzione

print(solution)

Eq(y(t), (C1 + t*(C2 + C3*t))*exp(t))

Questo vuol dire che la soluzione dell'equazione differenziale è

$$ y(t) = C_1 + t \cdot (C_2 + C_3 \cdot t) \cdot e^t $$

Mettendo tutto insieme in un unico script:

from sympy import symbols, Function, Eq, dsolve

# Definizione delle variabili
t = symbols('t')
y = Function('y')(t)

# Definizione dell'equazione differenziale del terzo ordine

ode = Eq(y.diff(t, 3) - 3*y.diff(t, 2) + 3*y.diff(t) - y, 0)

# Risoluzione dell'equazione differenziale
solution = dsolve(ode, y)

# Stampa della soluzione
print(solution)

In questo modo ho risolto un'equazione differenziale del terzo ordine con SymPy.

Per fare qualcosa di diverso, come un'equazione di ordine superiore o un sistema di equazioni differenziali, il processo è simile: definisco le variabili e le funzioni come simboli, scrivo le equazioni, e uso dsolve() per trovare la soluzione.

E così via.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

Sympy