Lange Geschichte.
So wäre es rechnerisch zumindest am glattesten.
Aber Ich würde den Wirkstoff nach hintenraus lieber sanft abbauen lassen, statt auf und ab. Man will ja auch nicht bis ~Mitternacht zu viel Restwirkung haben
So irgendwie 🙈
import numpy as np
import matplotlib.pyplot as plt
Finales 3-Kompartiment-Modellparameter
dose = 20.0 # Basisdose 20 mg
ka_sf = 2.0 # IR-Absorptionsrate (1/h)
ka_vf = 0.5 # SR-Absorptionsrate (1/h)
Tlag_vf = 4.0 # Lag-Time für SR (h)
ke = np.log(2) / 2.0 # Eliminationsrate (t1/2 = 2 h)
k12 = 1.0 # Zentral → Peripher 1
k21 = 0.5 # Peripher 1 → Zentral
k13 = 1.0 # Zentral → Peripher 2
k31 = 0.02 # Peripher 2 → Zentral
Vd = 185.0 # L
Zeitraster (0–18 h)
dt = 0.01
t = np.arange(0, 18 + dt, dt)
Simulationsfunktion
def simulate(frac_sf, frac_vf, dose_amount):
Ag_sf = dose_amount * frac_sf
Ag_vf = dose_amount * frac_vf
Ac, Ap1, Ap2 = 0.0, 0.0, 0.0
C = np.zeros_like(t)
for i, ti in enumerate(t):
abs_sf = ka_sf * Ag_sf
abs_vf = ka_vf * Ag_vf if ti >= Tlag_vf else 0.0
Ag_sf -= abs_sf * dt
Ag_vf -= abs_vf * dt
elim = ke * Ac
d12 = k12 * Ac
d21 = k21 * Ap1
d13 = k13 * Ac
d31 = k31 * Ap2
Ac += (abs_sf + abs_vf + d21 + d31 - elim - d12 - d13) * dt
Ap1 += (d12 - d21) * dt
Ap2 += (d13 - d31) * dt
C[i] = (Ac / Vd) * 1000 # mg/L -> ng/mL
return C
Kalibrierung an PZ-Kurve (20 mg)
C_ir_20 = simulate(0.5, 0.0, dose)
C_sr_20 = simulate(0.0, 0.5, dose)
IR-Peak 1.3 ng/mL bei 2 h
scale_ir = 1.3 / np.interp(2.0, t, C_ir_20)
SR-Peak 8.0 ng/mL im Fenster [4.5,7.0] h
mask_sr = (t >= 4.5) & (t <= 7.0)
scale_sr = 8.0 / C_sr_20[mask_sr].max()
Einzelprofile erstellen
C_single_20 = scale_ir * C_ir_20 + scale_sr * C_sr_20
C_single_10 = 0.5 * C_single_20 # Halbierte Kurve für 10 mg
Dosierung 20-10-20-10 (07:00, 10:30, 14:00, 17:30)
dose_times = [0.0, 3.5, 7.0, 10.5] # Stunden nach 07:00
dose_amounts = [20.0, 10.0, 20.0, 10.0]
Kumulierte Konzentrations-Zeit-Kurve
C_multi = np.zeros_like(t)
for dt_rel, amt in zip(dose_times, dose_amounts):
profile = C_single_20 if amt == 20.0 else C_single_10
C_multi += np.interp(t - dt_rel, t, profile, left=0, right=0)
Plot
plt.figure(figsize=(8, 4))
plt.plot(t + 7, C_multi, color=‚orange‘, lw=2)
plt.xlabel(‚Uhrzeit (h, lokal)‘)
plt.ylabel(‚Plasmakonzentration (ng/mL)‘)
plt.title(‚Simulierter Tagesverlauf: 20 mg um 07:00,\n10 mg um 10:30, 20 mg um 14:00, 10 mg um 17:30‘)
plt.grid(True)
plt.tight_layout()
plt.show()