scipy odeint: Array einfügen
Verfasst: Donnerstag 2. Januar 2020, 22:48
Hallo zusammen,
mein Problem ist das Folgende:
ich würde gerne eine DGL 2ter Ordnung lösen, allerdings hat diese DGL ein Störglied, welches mir als eine Liste vorliegt.
Diese DGL würde ich gerne mittel scipy.odeint lösen, allerdings schaffe ich nicht die Liste des Störgliedes in die Gleichung einzubauen. Wenn ich eine einzelne Zahl oder np.cos(t) nehme funktioniert es, nur eben bei einer Liste nicht.
u ist eine Beispiel Liste die ich gerne zu "return" hinzufügen würde, folgende Fehlermeldung kommt dann allerdings: "TypeError: Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'"
Ich hoffe ich konnte das Problem verständlich beschreiben.
Über Hilfe wäre ich sehr dankbar
Hier unten noch der dazugehörige Beispielcode.
mein Problem ist das Folgende:
ich würde gerne eine DGL 2ter Ordnung lösen, allerdings hat diese DGL ein Störglied, welches mir als eine Liste vorliegt.
Diese DGL würde ich gerne mittel scipy.odeint lösen, allerdings schaffe ich nicht die Liste des Störgliedes in die Gleichung einzubauen. Wenn ich eine einzelne Zahl oder np.cos(t) nehme funktioniert es, nur eben bei einer Liste nicht.
Code: Alles auswählen
def model(z,t):
u = np.array([1,1,1,1,1,1,1,1,1,1])
#u = np.cos(t)
return np.array([z[1], u -6*z[1]-10*z[0]])
Ich hoffe ich konnte das Problem verständlich beschreiben.
Über Hilfe wäre ich sehr dankbar

Hier unten noch der dazugehörige Beispielcode.
Code: Alles auswählen
import matplotlib.pyplot as plt
from scipy.integrate import odeint
import numpy as np
# function that returns dz/dt
def model(z,t):
u = np.array([1,1,1,1,1,1,1,1,1,1])
#u = np.cos(t)
return np.array([z[1], u -6*z[1]-10*z[0]])
# initial condition
z0 = [0,4]
# time points
t = np.linspace(0,5,10)
# solve ODE
z = odeint(model,z0,t)
# plot results
plt.plot(t,z[:,0],'b-',label= "x")
plt.ylabel('response')
plt.xlabel('time')
plt.legend(loc='best')
plt.show()