Michaelis-Menten Kinetics Simulation

This document presents a simulation showing how substrate concentration changes over time using Michaelis-Menten kinetics.

Problem Description

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].

R Code and Explanation

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()