Mit numpy, sympy, scipy Lösen Sie die gewöhnliche Differentialgleichung erster Ordnung unter den Anfangsbedingungen.
Problem: $ x '(t) + k x (t) = 0 $, Anfangsbedingung $ x (0) = 1 $, (k = 1 ist ein Parameter)
Die genaue Lösung ist $ x (t) = e ^ {-t} $.
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
"""
Beispiel:Gewöhnliche Differentialgleichung erster Ordnung:
dx/dt = -kx x(0)=Löse unter der Anfangsbedingung 1
"""
x=Symbol('x') #Brief'x'Ist als die Variable x definiert
y=Symbol('y') #Brief'y'Ist als die Variable y definiert
t=Symbol('t') #Brief't'Ist als die Variable y definiert
k=Symbol('k')
def func(x, t, k): # dx/Definieren Sie dt als Funktion
dxdt=-k*x
return dxdt
k = 1.0 #Legen Sie einen Wert für einen Parameter fest
x0 = 1.0 #Anfangsbedingungen
t=np.linspace(0,10,101) #Zeitschritteinstellung der Integration:Teilen Sie 0 bis 10 in 101 gleiche Teile
sol=odeint(func, x0, t, args=(k,)) #Lösen Sie die Differentialgleichung numerisch. Speichern Sie die Ergebnisse in einer Liste namens sol.
#Genaue Lösung zum Vergleich(e^-t)Liste genau_Auf Sol setzen
exact_sol=[]
tt=np.linspace(0,10,101)
for i in tt:
exact_sol.append(exp(-1.0*float(i)))
#
#Visualisierung
plt.plot(t, sol, linewidth=1,label='numerical') #Numerische Lösung
plt.plot(tt, exact_sol, color='red',linewidth=1, label='exact') #Wahre Lösung
plt.xlabel('t', fontsize=18)
plt.ylabel('x', fontsize=18,rotation='horizontal')
plt.legend(loc='upper right')
plt.show()
Recommended Posts