2.2 薬の吸収(昔やったやつ)

濃度の速度変化は血流中の薬物の濃度に比例する、というモデルを立てると、上の式を用いて
t:時刻
y(t):ある時刻tでの血中濃度
\frac{dy}{dt}=-ky
y(t)=y_{0}e^{-k(t-t_{0})}
時間間隔TでN回薬物を投与するとする。
薬物を加えた直後では
y(0)=y_0
である。ここから、次回投与t=Tの濃度は
y(T)=y_{0}e^{-kT}
であり、t=Tになった瞬間、薬物を投与すると
\begin{align}y(T)&=y_{0}e^{-kT}+y_0\\&=y_0(1+e^{-kT})\end{align}
次の濃度低下は、y(T)から始まるとすれば、次々回投与t=T~2Tではy_0\to y_0 (1+e^{-kT})と置き換えて
y(t)=y_0 (1+e^{-kT})e^{-k(t-T)}(ただしT\leq t \leq 2T
t=2Tになったとき、また投与をすると
\begin{align}y(2T)&=y_0 (1+e^{-kT})e^{-kT} + y_0\\&=y_0(1+e^{-kT}+e^{-2kT})\end{align}
一般化して
\begin{align}y(NT)&=y_0(1+e^{-kT}+e^{-2kT}+\dots +e^{-NkT})\\&=y_0\frac{1-e^{-(N+1)kT}}{1-e^{-kT}}\\&\to  \frac{y_0}{1-e^{-kT}}\end{align}

time_interval <- seq(0, 1, by=0.05) #投与間隔

y0 <- 100 #1回の注射で投与する量
k <- 0.2
#上の関数
y <- function(dose_time, y_start){
	return(y_start * exp(-k * dose_time))
}

N <- 30 #投与回数
blood_conc <- y0
max_conc <- 1
#愚直に計算する
for(i in 1:(N - 1)){
	blood_conc <- append(blood_conc, y(time_interval, tail(blood_conc, 1)))
	blood_conc[length(blood_conc)] <- tail(blood_conc, 1) + y0
	max_conc <- append(max_conc, which(blood_conc==max(blood_conc)))
}

plot(blood_conc, ylim=c(0, max(blood_conc)), type="l", xlab="time", ylab="concentration")
lines(max_conc, blood_conc[max_conc], lty=2, col=2) #最終的に到達する濃度


投与回数を増やすとある一定濃度に落ち着く。
ここで、N\to \inftyのときに求まる濃度をいきなり与えると

blood_conc <- max(blood_conc)
max_conc <- 1
#愚直に計算する
for(i in 1:(N - 1)){
	blood_conc <- append(blood_conc, y(time_interval, tail(blood_conc, 1)))
	blood_conc[length(blood_conc)] <- tail(blood_conc, 1) + y0
	max_conc <- append(max_conc, which(blood_conc==max(blood_conc)))
}

plot(blood_conc, ylim=c(0, max(blood_conc)), type="l", xlab="time", ylab="concentration")
lines(max_conc, blood_conc[max_conc], lty=2, col=2) #最終的に到達する濃度


最初から目的の濃度を維持するパターンになる。