Protein-ligand binding kinetics
6 views (last 30 days)
Show older comments
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
0 Comments
Accepted Answer
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
More Answers (0)
See Also
Categories
Find more on Ordinary Differential Equations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!