Protein-ligand binding kinetics

6 views (last 30 days)
Hello,
I'm suffering to plot the equation.
The reaction is that with forward constant kon and backward constant koff
The equation is
d[AB] / dt = kon [A][B] - koff [AB]
d[A] / dt = -kon [A][B] + koff [AB]
d[B] / dt = -kon [A][B] - koff [AB]
And the boundary conditions are
Initial_antigen_concentration [A0] = 55.37e-12 M
Initial_antibody_concentration [B0] = 19.33e-6 M
kon = 1e+5 M/sec
koff = 1e-2 /sec
My code was that
----------------------------------------------------------------------------------------------------------------
% Initial condition
A0 = 55.37e-12; % Initial antigen concentration
B0 = 19.33e-6; % Initial antibody concentration
AB0 = 0; % Initial antibody-antigen complex concentration
kon = 1e+5; % Forward reaction constant
koff = 1e-3; % Backward reaction constant
% Time range
tspan = [0 1000];
% set the initial condition
initial_conditions = [A0, B0, AB0];
% The equation
ode_system = @(t, y) [
-kon * y(1) * y(2) + koff * y(3); % d[A]/dt
-kon * y(1) * y(2) + koff * y(3); % d[B]/dt
kon * y(1) * y(2) - koff * y(3); % d[AB]/dt
];
[t, concentrations] = ode45(ode_system, tspan, initial_conditions);
% Normalization of the complex concentration to initial antigen concentration
normalized_complex_concentration = concentrations(:, 3) / A0;
% Plot the graph
figure;
plot(t, normalized_complex_concentration, 'g');
xlabel('Time');
ylabel('Complex Concentration / Initial Antigen Concentration');
title('Antigen-Antibody Complex Formation Over Time');
----------------------------------------------------------------------------------------------------------------
The maximum value of [AB] is equal or less than [A0] cause A is less than B.
So that the y axis should be 0 to 1 with normalization.
But the graph is fluctuated with the maximum y value ~ 2 x 10^4
Is the code is wrong to display the graphy? TT

Accepted Answer

Star Strider
Star Strider on 18 Dec 2023
The problem may be that the integration time is too long, since the complex reaches saturation in about 5 seconds (assuming that time unit), and then should remain stable. I suspect that something to do with floating-point approximation error may be the reason for the random noise later. Note that the equations are also likely ‘stiff’ (because of the range of the parameters), and changing the solver to ode15s or ode23s results in a relatively smooth curve.
% Initial condition
A0 = 55.37e-12; % Initial antigen concentration
B0 = 19.33e-6; % Initial antibody concentration
AB0 = 0; % Initial antibody-antigen complex concentration
kon = 1e+5; % Forward reaction constant
koff = 1e-3; % Backward reaction constant
% Time range
tspan = [0 1000];
t_end = 10;
tspan = linspace(0, t_end, 1E+6);
% set the initial condition
initial_conditions = [A0, B0, AB0];
% The equation
ode_system = @(t, y) [-kon * y(1) * y(2) + koff * y(3); % d[A]/dt
-kon * y(1) * y(2) + koff * y(3); % d[B]/dt
kon * y(1) * y(2) - koff * y(3)]; % d[AB]/dt
[t, concentrations] = ode23s(ode_system, tspan, initial_conditions);
% Normalization of the complex concentration to initial antigen concentration
normalized_complex_concentration = concentrations(:, 3) / A0;
% Plot the graph
figure;
plot(t, normalized_complex_concentration, 'g');
xlabel('Time');
ylabel('Complex Concentration / Initial Antigen Concentration');
title('Antigen-Antibody Complex Formation Over Time');
grid
axis('padded')
Extending the integration time further still shows some sort of initial transient that does not show up with a shorter integration time. Using a stiff solver and a shorter integration time solves the ‘noise’ problem.
.
  2 Comments
Bohoon Han
Bohoon Han on 2 Jan 2024
I really appreciate for you answer.
Thank you!
Star Strider
Star Strider on 2 Jan 2024
As always, my pleasure!

Sign in to comment.

More Answers (0)

Products


Release

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!