Mit numpy, sympy, scipy Lösen Sie die gewöhnliche Differentialgleichung zweiter Ordnung unter den Anfangsbedingungen.
Problem (einfache Vibration): ($ k = 1 $ ist ein Parameter) $ x '' (t) + kx (t) = 0 $, Anfangsbedingung $ x (0) = 0, x '(0) = 1 $
In Problem gewöhnlicher Differentialgleichungen erster Ordnung sind die Anfangsbedingungen numerisch angegeben, aber in der Lösung gewöhnlicher Differentialgleichungen zweiter Ordnung sind ** Anfangsbedingungen aufgeführt. Beachten Sie, dass geben in **.
from sympy import * #Imoprt alle Funktionen aus der Sympy-Bibliothek
import numpy as np #import numpy mit dem Namen np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
"""
Differentialgleichung zweiter Ordnung
Beispiel(Einfache Vibration): d^2x/dt^2 = -kx x(0)=0,x'(0)=Löse unter der Anfangsbedingung 1
"""
#Symboldefinition
x=Symbol('x') #Brief'x'Ist als die Variable x definiert
t=Symbol('t') #Brief't'Ist definiert als die Variable t
k=Symbol('k') #Brief'k'Ist definiert als die Variable k. In dieser Frage wird es als Parameter verwendet.
#
def func2(x, t, k):
x1,x2=x
dxdt=[x2,-k*x1]
return dxdt
k = 1.0 #Parametereinstellungen
x0 = [0.0,1.0] #Anfangsbedingungen:Jedes x(0), x'(0)Repräsentiert
t=np.linspace(0,10,101) #Zeitschritteinstellung der Integration:Teilen Sie 0 bis 10 in 101 gleiche Teile
sol2=odeint(func2, x0, t, args=(k,)) #Lösen Sie die Differentialgleichung numerisch, x(t)Und x'(t)Das Sol2 der Liste[:,0]und[:,1]In Zutaten aufbewahren.
#Visualisierung
plt.plot(t, sol2[:,0], linewidth=1,label='x(t)') # x(t)Illustriert
plt.plot(t, sol2[:,1], linewidth=1,label='dx(t)/dt') # dx/Illustrierte dt
plt.xlabel('t', fontsize=18)
plt.ylabel('x', fontsize=18,rotation='horizontal')
plt.legend(loc='upper right')
plt.show()
Recommended Posts