利用Python绘制血药浓度-时间曲线——口服吸收一室模型

血药浓度-时间曲线一般是通过拟合所测定的血药浓度点而画出来的,但是在某些时候,如阅读文献时,我们需要根据别人报道的PK参数来画出药时曲线。Python语法简单,拥有丰富的开源库,下面尝试通过Python来根据已知的血药浓度公式绘制药时曲线。

我们选择口服给药、符合单室模型的药物来画图,因为这种药物较为常见,公式也很简单,并将2个模型的血药浓度画在同一张图上,便于比较。

首先绘制单剂量给药,对于model 1,我们设置给药剂量$X_0=5mg$,生物利用度$F=100%$,表观分布容积$V=20L$,一级吸收速率常数$k_a=1$,一级消除速率常数$k=0.1$;对于model 2,我们设置给药剂量$X_0=5mg$,生物利用度$F=100%$,表观分布容积$V=40L$,一级吸收速率常数$k_a=1$,一级消除速率常数$k=0.1$隔室模型示意图如下:

model 1的血药浓度表达式为:

$C=\frac{k_a\cdot X_0\cdot F}{V(k_a-k)}(e^{-kt}-e^{-k_at})=\frac{1\times 5 \times 1}{20\times (1-0.1)}(e^{-1}-e^{-0.1})$

model 2的血药浓度表达式为:

$C=\frac{k_a\cdot X_0\cdot F}{V(k_a-k)}(e^{-kt}-e^{-k_at})=\frac{1\times 5 \times 1}{40\times (1-0.1)}(e^{-1}-e^{-0.1})$

有了血药浓度公式,下面就可以画图了。

import numpy as np
import matplotlib.pyplot as plt
 
e=np.e 
plt.figure(figsize=(6,4)) 
t= np.linspace(0, 20, 1000)
 
plt.plot(t,5/(20*(1-0.1))*(e**(-0.1*t)-e**(-1*t)),label='model 1')
plt.legend()
plt.plot(t,5/(40*(1-0.1))*(e**(-0.1*t)-e**(-1*t)),label='model 2')
plt.legend() 
plt.title('single dose')
plt.xlabel('t (h)')
plt.ylabel('c (ng/ml)')
plt.show() 

单剂量搞定,下面考虑多剂量给药的图形。对于多剂量给药,我们一般需要使血药浓度达到稳态。

以model 1为例,首先求算其表达式。设置给药间隔$\tau =5h$,给药次数$n=10$。在第1个给药周期内,其血药浓度为第1次给药后的浓度;在第2个给药周期内,其血药浓度为第1次给药后5~10 h内的浓度加上第2次给药后0~5 h内的浓度;以此类推。显然,多剂量给药,其血药浓度公式是一个分段函数:

$\begin{cases}
X_0\cdot e^{-kt} & \text{ if } n=1, 0\leq t\leq 5 \\
X_0\cdot e^{-kt}+X_1\cdot e^{-k\cdot(t-5)} & \text{ if } n=2, 5\leq t\leq 10 \\
X_0\cdot e^{-kt}+X_1\cdot e^{-k\cdot(t-5)}+X_2\cdot e^{-k\cdot(t-10)} & \text{ if } n=3, 5\leq t\leq 10 \\
\cdots \\
X_0\cdot e^{-kt}+X_1\cdot e^{-k\cdot(t-5)}+X_2\cdot e^{-k\cdot(t-10)}+\cdots +X_n\cdot e^{-k\cdot [t-5(n-1)]} & \text{ if } n=n, 5(n-1)\leq t\leq 5n
\end{cases}$

 

 

猜你喜欢

转载自www.cnblogs.com/zm-pop-pk/p/11228822.html