This document presents a simulation showing how substrate concentration changes over time using Michaelis-Menten kinetics.
An enzyme converts substrate S into product P. The reaction can be modeled via Michaelis-Menten kinetics[cite: 1]. The reaction velocity is \(v = \frac{V_{max} \cdot [S]}{K_m + [S]}\) and the rate of substrate change is \(-V = \frac{dS}{dt}\)[cite: 2].
Given initial substrate concentration \([S_0] = 10mM\), \(V_{max} = 2mM/min\), and \(K_m = 5mM\)[cite: 2], we need to show how substrate concentration changes over time until minute 20 by 0.05 min intervals[cite: 2].
The following R code simulates the change in substrate concentration over time using Michaelis-Menten kinetics and displays the results on a plot.
# Function to define the Michaelis-Menten kinetic model
# This function calculates the reaction velocity (v) using the Michaelis-Menten equation.
# S: Substrate concentration
# Vmax: Maximum reaction velocity
# Km: Michaelis constant (substrate concentration at which reaction velocity is half of Vmax)
michaelis_menten <- function(S, Vmax, Km) {
v = (Vmax * S) / (Km + S)
return(v)
}
# Set initial parameters
S0 <- 10 # Initial substrate concentration (mM)
Vmax <- 2 # Maximum reaction velocity (mM/min)
Km <- 5 # Michaelis constant (mM)
time_end <- 20 # End time for simulation (min)
dt <- 0.05 # Time interval (min)
# Initialize vectors to store results
time <- seq(0, time_end, by = dt) # Create a sequence of time points
S_concentration <- numeric(length(time)) # Create a numeric vector to store substrate concentrations
S_concentration[1] <- S0 # Set the initial substrate concentration at time 0
# Simulate the reaction using Euler's method
# Euler's method is a simple numerical integration technique for solving differential equations.
for (i in 2:length(time)) {
# Calculate the reaction velocity at the current substrate concentration
v <- michaelis_menten(S_concentration[i-1], Vmax, Km)
# Calculate the change in substrate concentration (dS) over the time interval dt
# Since -V = dS/dt, then dS = -V * dt
dS <- -v * dt
# Update the substrate concentration for the next time step
S_concentration[i] <- S_concentration[i-1] + dS
# Ensure substrate concentration does not go below zero
if (S_concentration[i] < 0) {
S_concentration[i] <- 0
}
}
# Plot the results (create the graph)
plot(time, S_concentration,
type = "l", # Draw lines
col = "blue", # Line color
lwd = 2, # Line width
xlab = "Time (min)", # X-axis label
ylab = "Substrate Concentration (mM)", # Y-axis label
main = "Substrate Concentration vs. Time (Michaelis-Menten Kinetics)") # Plot title
# Add points to the plot for better visualization (optional)
points(time, S_concentration, col = "red", pch = 16, cex = 0.5)
# Add a grid to the plot (optional, improves visualization)
grid()