Michaelis-Menten酵素動力學一般解:Lambert W function

Michaelis-Menten速率積分式

在描述一個酵素催化反應的速率時最典型的方法就是使用Michaelis-Menten表達式

$$\frac{d[A]}{dt} =- \frac{V_{max}[A]}{[A]+K_{M}} $$

其中在基質濃度$[A]$很大的時候A的消耗速率能達到最大值$V_{max}$
而$K_{M}$則表達了要多高的濃度
$[A]$才可以達到最大消耗速率的一半$\frac{V_{max}}{2}$

在學習基本的化學動力學時我們都聽過零級,一級,以及二級反應
利用積分的方式我們可以得到
$[A]$隨著時間t消耗的關係式
這樣我們便能藉由動力學實驗配合積分速率式得到相應的速率常數
然而我們能夠用同樣的方式處理Michaelis-Menten速率式嗎?
答案是肯定的

首先我們需要將$[A]$和時間項t分開至等號兩側並積分

$$\int_{[A]_{0}}^{[A]} 1+ \frac{K_{M}}{[A]} d[A] =  -\int_0^t V_{max}dt $$

積分後整理可以得到

 $$ln([A])+ \frac{[A]}{K_{M}} =ln([A]_{0})+ \frac{[A]_{0}-V_{max}t}{K_{M}} $$

如果想得到$[A](t)$的解析解乍看之下難以辦到

我們這時需要引入Lambert W function的概念

Lambert W function (朗伯W函數)

Lambert W function (或稱為Omega function)有以下的定義:

$$y e^{y}=x \Longleftrightarrow y=W(x) $$

注意在一般實數應用裡$x \geq  -\frac{1}{e} $函數才會有定義
這個特殊函數可以被來在解許多指數方程式
只要能夠化成 $
ye^{y}=x$ 的形式

在原先的問題中為了得到指數項
只需要將非對數項用$z=ln( e^{z}) $表示即可

$$ln([A] e^{\frac{[A]}{K_{M}}}) =ln([A]_{0} e^{\frac{[A]_{0}-V_{max}t}{K_{M}}} ) $$

將兩邊自然對數拿掉可得

$$[A] e^{\frac{[A]}{K_{M}}} =[A]_{0} e^{\frac{[A]_{0}-V_{max}t}{K_{M}}}  $$

為了湊出Lambert W function的形式
指數和指數前的係數必須一樣
所以可以考慮兩邊同除$
K_{M}$

$$\frac{[A]}{K_{M}} e^{\frac{[A]}{K_{M}}} =\frac{[A]_{0} }{K_{M}} e^{\frac{[A]_{0}-V_{max}t}{K_{M}}}$$

如此以來最後的解就是

$$\frac{[A]}{K_{M}}  =W(\frac{[A]_{0} }{K_{M}} e^{\frac{[A]_{0}-V_{max}t}{K_{M}}})$$

利用無因次化的$[A]$對無因次化的t作圖,可得到在不同初始濃度下基質對時間的變化

利用積分速率式求取未知參數

如果我們現在有一組基質濃度對時間的動力學數據
可以用MATLAB的fitnlm函數來得到未知數據$[A]_{0}, K_{M}, V_{max}$
我先假設真實$K_{M}=0.5 mM, V_{max} = 0.1 mM/min, [A]_{0} = 0.5 mM$
經過非線性迴歸後可得
$K_{M}=0.48 mM, V_{max} = 0.09 mM/min, [A]_{0} = 0.68 mM$



% Real parameters
KM_real = 0.5; % mM
Vmax_real = 0.1; % mM/min
A0_real = 0.5; % mM
% Corrupt A with some random noise
A = y(1,:)*KM_real; 
A = A + 0.03*randn(1,length(A));
t = x*KM_real/Vmax_real;
% Specify the model function for regression
modelfun = @(b,t) b(1).*lambertw(b(3)./b(1).*exp(b(3)-b(2).*t./b(1)));
% Initial guess of parameters
beta0 = [0.5 0.1 0.5]; 
% Non-linear fitting
mdl = fitnlm(t,A,modelfun,beta0);
% b(1) = KM, b(2) = Vmax, b(3) = A0
KM_est = table2array(mdl.Coefficients(1,1))
Vmax_est = table2array(mdl.Coefficients(2,1))
A0_est = table2array(mdl.Coefficients(3,1))
A_est = modelfun([KM_est Vmax_est A0_est],t);
scatter(t,A,'r','filled','MarkerFaceAlpha',0.4);hold on
plot(t,A_est,'k','LineWidth',2);
ylabel('[A](mM)');
xlabel('t (min)');
legend('Raw data','Estimation')

Comments

Popular posts from this blog

大聖塔芭芭拉(Santa Barbara)地區私房景點推薦

[Upstream bioprocess development] Some notes about recent upstream process characterization approach

程序設計被忽略的一角:最大選擇率