Utilisation de numpy, sympy, scipy Résolvez l'équation différentielle ordinaire du second ordre dans les conditions initiales.
Problème (vibration simple): ($ k = 1 $ est un paramètre) $ x '' (t) + kx (t) = 0 $, condition initiale $ x (0) = 0, x '(0) = 1 $
Dans Problème d'équation différentielle ordinaire du premier ordre, les conditions initiales sont données numériquement, mais dans la solution des équations différentielles ordinaires du second ordre, ** les conditions initiales sont listées Notez que cédez **.
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
"""
Équation différentielle du second ordre
exemple(Vibration simple): d^2x/dt^2 = -kx x(0)=0,x'(0)=Résoudre sous la condition initiale de 1
"""
#Définition du symbole
x=Symbol('x') #lettre'x'Est défini comme la variable x
t=Symbol('t') #lettre't'Est défini comme la variable t
k=Symbol('k') #lettre'k'Est définie comme la variable k. Dans cette question, il est utilisé comme paramètre.
#
def func2(x, t, k):
x1,x2=x
dxdt=[x2,-k*x1]
return dxdt
k = 1.0 #réglages des paramètres
x0 = [0.0,1.0] #Conditions initiales:Chaque x(0), x'(0)Représente
t=np.linspace(0,10,101) #Réglage du pas de temps de l'intégration:Divisez 0 à 10 en 101 parties égales
sol2=odeint(func2, x0, t, args=(k,)) #Résoudre l'équation différentielle numériquement, x(t)Et x'(t)Le sol2 de la liste[:,0]et[:,1]Conserver dans les ingrédients.
#Visualisation
plt.plot(t, sol2[:,0], linewidth=1,label='x(t)') # x(t)Illustré
plt.plot(t, sol2[:,1], linewidth=1,label='dx(t)/dt') # dx/Dt illustré
plt.xlabel('t', fontsize=18)
plt.ylabel('x', fontsize=18,rotation='horizontal')
plt.legend(loc='upper right')
plt.show()