To calculate steady-state enzyme state fractions in a catalytic cycle using the King-Altman method
Calculate the kinetic matrix, where Ae = de (
Ais the matrix,eis the vector of enzyme states, anddeis the time derivative ofe)To find the weight of enzyme state
i, make a (n-1)x(n-1) matrix by skipping thei-th row andi-th column of the input matrixCalculate the determinant of the matrix from step 2. That is the weight of enzyme state
i.The fraction of enzyme state
iis the weight of stateiover the sum of all states.
using Symbolics
using LinearAlgebra # det()Make a (n-1)x(n-1) matrix by skipping the i-th row and i-th column of the input matrix
function skip_colrow(mat, i::Int)
rows = collect(1:size(mat, 1))
cols = collect(1:size(mat, 2))
return mat[rows.!=i, cols.!=i]
endskip_colrow (generic function with 1 method)Accumulate rates into the transition rate (kinectic) matrix
function accumulate_rate!(mat, rate, src::Int, dst::Int)
mat[dst, src] += rate
mat[src, src] -= rate
return mat
endaccumulate_rate! (generic function with 1 method)Take a complicated model as an example (Complex I model in Gauthier, 2013)
mat_c1g = let
@variables a12 a21 a65 a56 a61 a16 a23 a32 a34 a43 a47 a74 a57 a75 a42 a24
mat = fill(Num(0), 7, 7)
accumulate_rate!(mat, a12, 1, 2)
accumulate_rate!(mat, a21, 2, 1)
accumulate_rate!(mat, a65, 6, 5)
accumulate_rate!(mat, a56, 5, 6)
accumulate_rate!(mat, a61, 6, 1)
accumulate_rate!(mat, a16, 1, 6)
accumulate_rate!(mat, a23, 2, 3)
accumulate_rate!(mat, a32, 3, 2)
accumulate_rate!(mat, a34, 3, 4)
accumulate_rate!(mat, a43, 4, 3)
accumulate_rate!(mat, a47, 4, 7)
accumulate_rate!(mat, a74, 7, 4)
accumulate_rate!(mat, a57, 5, 7)
accumulate_rate!(mat, a75, 7, 5)
accumulate_rate!(mat, a42, 4, 2)
accumulate_rate!(mat, a24, 2, 4)
end7×7 Matrix{Symbolics.Num}:
-a12 - a16 a21 … 0 a61 0
a12 -a21 - a23 - a24 0 0 0
0 a23 0 0 0
0 a24 0 0 a74
0 0 -a56 - a57 a65 a75
a16 0 … a56 -a61 - a65 0
0 0 a57 0 -a74 - a75The weight of each state:
@time weights_c1g = [(-1)^(7-1) * det(skip_colrow(mat_c1g, i)) |> expand for i in 1:7] 1.639531 seconds (3.13 M allocations: 200.606 MiB, 2.41% gc time, 95.93% compilation time)
7-element Vector{Symbolics.Num}:
a21*a32*a42*a56*a61*a74 + a21*a32*a42*a56*a61*a75 + a21*a32*a42*a57*a61*a74 + a21*a32*a42*a57*a65*a74 + a21*a32*a43*a56*a61*a74 + a21*a32*a43*a56*a61*a75 + a21*a32*a43*a57*a61*a74 + a21*a32*a43*a57*a65*a74 + a21*a32*a47*a56*a61*a75 + a21*a34*a42*a56*a61*a74 + a21*a34*a42*a56*a61*a75 + a21*a34*a42*a57*a61*a74 + a21*a34*a42*a57*a65*a74 + a21*a34*a47*a56*a61*a75 + a23*a34*a47*a56*a61*a75 + a24*a32*a47*a56*a61*a75 + a24*a34*a47*a56*a61*a75
a12*a32*a42*a56*a61*a74 + a12*a32*a42*a56*a61*a75 + a12*a32*a42*a57*a61*a74 + a12*a32*a42*a57*a65*a74 + a12*a32*a43*a56*a61*a74 + a12*a32*a43*a56*a61*a75 + a12*a32*a43*a57*a61*a74 + a12*a32*a43*a57*a65*a74 + a12*a32*a47*a56*a61*a75 + a12*a34*a42*a56*a61*a74 + a12*a34*a42*a56*a61*a75 + a12*a34*a42*a57*a61*a74 + a12*a34*a42*a57*a65*a74 + a12*a34*a47*a56*a61*a75 + a16*a32*a42*a57*a65*a74 + a16*a32*a43*a57*a65*a74 + a16*a34*a42*a57*a65*a74
a12*a23*a42*a56*a61*a74 + a12*a23*a42*a56*a61*a75 + a12*a23*a42*a57*a61*a74 + a12*a23*a42*a57*a65*a74 + a12*a23*a43*a56*a61*a74 + a12*a23*a43*a56*a61*a75 + a12*a23*a43*a57*a61*a74 + a12*a23*a43*a57*a65*a74 + a12*a23*a47*a56*a61*a75 + a12*a24*a43*a56*a61*a74 + a12*a24*a43*a56*a61*a75 + a12*a24*a43*a57*a61*a74 + a12*a24*a43*a57*a65*a74 + a16*a21*a43*a57*a65*a74 + a16*a23*a42*a57*a65*a74 + a16*a23*a43*a57*a65*a74 + a16*a24*a43*a57*a65*a74
a12*a23*a34*a56*a61*a74 + a12*a23*a34*a56*a61*a75 + a12*a23*a34*a57*a61*a74 + a12*a23*a34*a57*a65*a74 + a12*a24*a32*a56*a61*a74 + a12*a24*a32*a56*a61*a75 + a12*a24*a32*a57*a61*a74 + a12*a24*a32*a57*a65*a74 + a12*a24*a34*a56*a61*a74 + a12*a24*a34*a56*a61*a75 + a12*a24*a34*a57*a61*a74 + a12*a24*a34*a57*a65*a74 + a16*a21*a32*a57*a65*a74 + a16*a21*a34*a57*a65*a74 + a16*a23*a34*a57*a65*a74 + a16*a24*a32*a57*a65*a74 + a16*a24*a34*a57*a65*a74
a12*a23*a34*a47*a61*a75 + a12*a23*a34*a47*a65*a75 + a12*a24*a32*a47*a61*a75 + a12*a24*a32*a47*a65*a75 + a12*a24*a34*a47*a61*a75 + a12*a24*a34*a47*a65*a75 + a16*a21*a32*a42*a65*a74 + a16*a21*a32*a42*a65*a75 + a16*a21*a32*a43*a65*a74 + a16*a21*a32*a43*a65*a75 + a16*a21*a32*a47*a65*a75 + a16*a21*a34*a42*a65*a74 + a16*a21*a34*a42*a65*a75 + a16*a21*a34*a47*a65*a75 + a16*a23*a34*a47*a65*a75 + a16*a24*a32*a47*a65*a75 + a16*a24*a34*a47*a65*a75
a12*a23*a34*a47*a56*a75 + a12*a24*a32*a47*a56*a75 + a12*a24*a34*a47*a56*a75 + a16*a21*a32*a42*a56*a74 + a16*a21*a32*a42*a56*a75 + a16*a21*a32*a42*a57*a74 + a16*a21*a32*a43*a56*a74 + a16*a21*a32*a43*a56*a75 + a16*a21*a32*a43*a57*a74 + a16*a21*a32*a47*a56*a75 + a16*a21*a34*a42*a56*a74 + a16*a21*a34*a42*a56*a75 + a16*a21*a34*a42*a57*a74 + a16*a21*a34*a47*a56*a75 + a16*a23*a34*a47*a56*a75 + a16*a24*a32*a47*a56*a75 + a16*a24*a34*a47*a56*a75
a12*a23*a34*a47*a56*a61 + a12*a23*a34*a47*a57*a61 + a12*a23*a34*a47*a57*a65 + a12*a24*a32*a47*a56*a61 + a12*a24*a32*a47*a57*a61 + a12*a24*a32*a47*a57*a65 + a12*a24*a34*a47*a56*a61 + a12*a24*a34*a47*a57*a61 + a12*a24*a34*a47*a57*a65 + a16*a21*a32*a42*a57*a65 + a16*a21*a32*a43*a57*a65 + a16*a21*a32*a47*a57*a65 + a16*a21*a34*a42*a57*a65 + a16*a21*a34*a47*a57*a65 + a16*a23*a34*a47*a57*a65 + a16*a24*a32*a47*a57*a65 + a16*a24*a34*a47*a57*a65Total weights:
total_weight_c1g = sum(weights_c1g)a12*a23*a34*a47*a56*a61 + a12*a23*a34*a47*a56*a75 + a12*a23*a34*a47*a57*a61 + a12*a23*a34*a47*a57*a65 + a12*a23*a34*a47*a61*a75 + a12*a23*a34*a47*a65*a75 + a12*a23*a34*a56*a61*a74 + a12*a23*a34*a56*a61*a75 + a12*a23*a34*a57*a61*a74 + a12*a23*a34*a57*a65*a74 + a12*a23*a42*a56*a61*a74 + a12*a23*a42*a56*a61*a75 + a12*a23*a42*a57*a61*a74 + a12*a23*a42*a57*a65*a74 + a12*a23*a43*a56*a61*a74 + a12*a23*a43*a56*a61*a75 + a12*a23*a43*a57*a61*a74 + a12*a23*a43*a57*a65*a74 + a12*a23*a47*a56*a61*a75 + a12*a24*a32*a47*a56*a61 + a12*a24*a32*a47*a56*a75 + a12*a24*a32*a47*a57*a61 + a12*a24*a32*a47*a57*a65 + a12*a24*a32*a47*a61*a75 + a12*a24*a32*a47*a65*a75 + a12*a24*a32*a56*a61*a74 + a12*a24*a32*a56*a61*a75 + a12*a24*a32*a57*a61*a74 + a12*a24*a32*a57*a65*a74 + a12*a24*a34*a47*a56*a61 + a12*a24*a34*a47*a56*a75 + a12*a24*a34*a47*a57*a61 + a12*a24*a34*a47*a57*a65 + a12*a24*a34*a47*a61*a75 + a12*a24*a34*a47*a65*a75 + a12*a24*a34*a56*a61*a74 + a12*a24*a34*a56*a61*a75 + a12*a24*a34*a57*a61*a74 + a12*a24*a34*a57*a65*a74 + a12*a24*a43*a56*a61*a74 + a12*a24*a43*a56*a61*a75 + a12*a24*a43*a57*a61*a74 + a12*a24*a43*a57*a65*a74 + a12*a32*a42*a56*a61*a74 + a12*a32*a42*a56*a61*a75 + a12*a32*a42*a57*a61*a74 + a12*a32*a42*a57*a65*a74 + a12*a32*a43*a56*a61*a74 + a12*a32*a43*a56*a61*a75 + a12*a32*a43*a57*a61*a74 + a12*a32*a43*a57*a65*a74 + a12*a32*a47*a56*a61*a75 + a12*a34*a42*a56*a61*a74 + a12*a34*a42*a56*a61*a75 + a12*a34*a42*a57*a61*a74 + a12*a34*a42*a57*a65*a74 + a12*a34*a47*a56*a61*a75 + a16*a21*a32*a42*a56*a74 + a16*a21*a32*a42*a56*a75 + a16*a21*a32*a42*a57*a65 + a16*a21*a32*a42*a57*a74 + a16*a21*a32*a42*a65*a74 + a16*a21*a32*a42*a65*a75 + a16*a21*a32*a43*a56*a74 + a16*a21*a32*a43*a56*a75 + a16*a21*a32*a43*a57*a65 + a16*a21*a32*a43*a57*a74 + a16*a21*a32*a43*a65*a74 + a16*a21*a32*a43*a65*a75 + a16*a21*a32*a47*a56*a75 + a16*a21*a32*a47*a57*a65 + a16*a21*a32*a47*a65*a75 + a16*a21*a32*a57*a65*a74 + a16*a21*a34*a42*a56*a74 + a16*a21*a34*a42*a56*a75 + a16*a21*a34*a42*a57*a65 + a16*a21*a34*a42*a57*a74 + a16*a21*a34*a42*a65*a74 + a16*a21*a34*a42*a65*a75 + a16*a21*a34*a47*a56*a75 + a16*a21*a34*a47*a57*a65 + a16*a21*a34*a47*a65*a75 + a16*a21*a34*a57*a65*a74 + a16*a21*a43*a57*a65*a74 + a16*a23*a34*a47*a56*a75 + a16*a23*a34*a47*a57*a65 + a16*a23*a34*a47*a65*a75 + a16*a23*a34*a57*a65*a74 + a16*a23*a42*a57*a65*a74 + a16*a23*a43*a57*a65*a74 + a16*a24*a32*a47*a56*a75 + a16*a24*a32*a47*a57*a65 + a16*a24*a32*a47*a65*a75 + a16*a24*a32*a57*a65*a74 + a16*a24*a34*a47*a56*a75 + a16*a24*a34*a47*a57*a65 + a16*a24*a34*a47*a65*a75 + a16*a24*a34*a57*a65*a74 + a16*a24*a43*a57*a65*a74 + a16*a32*a42*a57*a65*a74 + a16*a32*a43*a57*a65*a74 + a16*a34*a42*a57*a65*a74 + a21*a32*a42*a56*a61*a74 + a21*a32*a42*a56*a61*a75 + a21*a32*a42*a57*a61*a74 + a21*a32*a42*a57*a65*a74 + a21*a32*a43*a56*a61*a74 + a21*a32*a43*a56*a61*a75 + a21*a32*a43*a57*a61*a74 + a21*a32*a43*a57*a65*a74 + a21*a32*a47*a56*a61*a75 + a21*a34*a42*a56*a61*a74 + a21*a34*a42*a56*a61*a75 + a21*a34*a42*a57*a61*a74 + a21*a34*a42*a57*a65*a74 + a21*a34*a47*a56*a61*a75 + a23*a34*a47*a56*a61*a75 + a24*a32*a47*a56*a61*a75 + a24*a34*a47*a56*a61*a75And the fraction of each state: fi = wi / wTotal
This notebook was generated using Literate.jl.
- Qi, F., Dash, R. K., Han, Y., & Beard, D. A. (2009). Generating rate equations for complex enzyme systems by a computer-assisted systematic method. BMC Bioinformatics, 10(1). 10.1186/1471-2105-10-238