I das nächste System von Gleichungen:Verallgemeinern eine Funktion für eine ODE-Solver
#dY0=/dt = k1*S - k2*Y1*Y0
#dY1/dt = k3*S - k4*Y1
wobei S (t) eine Stufenfunktion, die bei t = 4 um eine Einheit erhöht, 8, 12 und so weiter . Mein Code ist folgende:
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
def stp(t):
if t < 4 and t >= 0:
return 0.0
if t < 8 and t >= 4:
return 1.0
if t < 12 and t >= 8:
return 2.0
if t < 16 and t >= 12:
return 3.0
if t < 20 and t >= 16:
return 4.0
else:
return 5.0
#Initial conditions:
y0 = np.array([1,0])
#Time
t = np.linspace(0, 20, 100)
def f(y,t):
s=stp(t)
k1=2
k2=2
k3=1
k4=1
dy0=k1*s - k2*y[1]*y[0]
dy1=k3*s - k4*y[1]
return (dy0, dy1)
res=odeint(f, y0, t)
Meine Frage ist, wie meine „stp“ Funktion verbessert werden, um würde so viele Bedingungen wie Zeitpunkt nicht aufschreiben ich angeben? (es endet mit der Angabe von 5 als Rückgabewert, nur um die Funktion zu beenden, sollte aber zunehmen, wenn die Zeitlänge ebenfalls zunimmt), ich meine, um es für jede Zeitlänge allgemein zu machen und verschiedene Intervalle für die Sprünge festzulegen der stückweisen Funktion.
Dank im Voraus
danke sehr! es hat perfekt funktioniert – Mau