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



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

Comments

Popular posts from this blog

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

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

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