Utilisation de numpy, sympy, scipy Résolvez l'équation différentielle ordinaire du premier ordre dans les conditions initiales.
problème: $ x '(t) + k x (t) = 0 $, condition initiale $ x (0) = 1 $, (k = 1 est un paramètre)
La solution exacte est $ x (t) = e ^ {-t} $.
from sympy import * #Imoprt toutes les fonctionnalités de la bibliothèque sympy
import numpy as np #import numpy avec le nom np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
"""
exemple:Équation différentielle ordinaire du premier ordre:
dx/dt = -kx x(0)=Résoudre sous la condition initiale de 1
"""
x=Symbol('x') #lettre'x'Est défini comme la variable x
y=Symbol('y') #lettre'y'Est défini comme la variable y
t=Symbol('t') #lettre't'Est défini comme la variable y
k=Symbol('k')
def func(x, t, k): # dx/Définir dt comme une fonction
dxdt=-k*x
return dxdt
k = 1.0 #Définir une valeur pour un paramètre
x0 = 1.0 #Conditions initiales
t=np.linspace(0,10,101) #Réglage du pas de temps de l'intégration:Divisez 0 à 10 en 101 parties égales
sol=odeint(func, x0, t, args=(k,)) #Résolvez l'équation différentielle numériquement. Stockez les résultats dans une liste appelée sol.
#Solution exacte pour comparaison(e^-t)Liste excact_Mettre à sol
exact_sol=[]
tt=np.linspace(0,10,101)
for i in tt:
exact_sol.append(exp(-1.0*float(i)))
#
#Visualisation
plt.plot(t, sol, linewidth=1,label='numerical') #Solution numérique
plt.plot(tt, exact_sol, color='red',linewidth=1, label='exact') #Vraie solution
plt.xlabel('t', fontsize=18)
plt.ylabel('x', fontsize=18,rotation='horizontal')
plt.legend(loc='upper right')
plt.show()