U-R-L-RL

Derivation of equilibrium thermodynamic equations for U-R-L-RL system: isomerization in both reactants and in the complex.

NOTE: ANALYTICAL SOLUTION WAS OBTAINED    Images from: /Users/kovrigin/Documents/Workspace/Global Analysis/code_development/Mathematical_models/Equilibrium thermodynamic models/U-R-L-RL/U-R-L-RL.ai

Back to Contents

Goals

Here I will derive equations for equilibrium when  R,  L and RL undergo isomerization. We do not specify whether isomers are able to bind to each other (this is a matter of kinetic modeling).

Back to Contents

1. Definitions

clean up workspace

reset()

Set path to save results into:

ProjectName:="U-R-L-RL";
CurrentPath:="/Users/kovrigin/Documents/Workspace/Global Analysis/code_development/Mathematical_models/Equilibrium_thermodynamic_models/U-R-L-RL/";  Binding and isomerization constants

All binding constants I am using are association constants.

These relationships serve as restraints for solve(), but not restrict these values in calculations!

K_A_1

K_A_1 ;
assumeAlso(K_A_1  > 0):
assumeAlso(K_A_1 , R_) K_B_1

K_B_1 ;
assumeAlso(K_B_1  > 0):
assumeAlso(K_B_1 , R_): K_B_2

K_B_2 ;
assumeAlso(K_B_2  > 0):
assumeAlso(K_B_2 , R_): K_B_3

K_B_3 ;
assumeAlso(K_B_3  > 0):
assumeAlso(K_B_3 , R_): Total concentrations

Rtot - total concentration of the  receptor

Rtot;
assumeAlso(Rtot>0):
assumeAlso(Rtot,R_): Ltot - total concentration of the  ligand

Ltot;
assumeAlso(Ltot>0):
assumeAlso(Ltot,R_): Equilibrium concentrations

Req - equilibrium concentration of the first receptor

Req;
assumeAlso(Req>0):
assumeAlso(Req<Rtot):
assumeAlso(Req,R_): Rstareq - equilibrium concentration of the second receptor

Rstareq;
assumeAlso(Rstareq>0):
assumeAlso(Rstareq<Rtot):
assumeAlso(Rstareq,R_): Leq - equilibrium concentration of a free ligand

Leq;
assumeAlso(Leq>0):
assumeAlso(Leq<Ltot):
assumeAlso(Leq,R_): Lstareq - equilibrium concentration of a free ligand

Lstareq;
assumeAlso(Lstareq>0):
assumeAlso(Lstareq<Ltot):
assumeAlso(Lstareq,R_): RLeq - equilibrium concentration of the first receptor-ligand complex

RLeq;
assumeAlso(RLeq>0):
assumeAlso(RLeq<Rtot):
assumeAlso(RLeq,R_): RLstareq - equilibrium concentration of the first receptor-ligand complex

RLstareq;
assumeAlso(RLstareq>0):
assumeAlso(RLstareq<Rtot):
assumeAlso(RLstareq,R_): Check what we defined

anames(Properties,User); Back to Contents

2. Basic equilibrium equations

Mass conservation equations

eq2_1:= Rtot = Req + Rstareq + RLeq + RLstareq;
eq2_2:= Ltot = Leq + Lstareq + RLeq + RLstareq;  Equilibrium constants

eq2_3:= K_A_1 = RLeq / (Req*Leq); eq2_4:= K_B_1 = Rstareq/Req eq2_5:= K_B_2 = Lstareq/Leq eq2_6:= K_B_3 = RLstareq/RLeq Back to Contents

3. Derivation of equations for equilibrium concentrations

Express Leq as a function of all constants and total concentrations. If insoluble ---express Rtot=f(Leq and all constants).

Express the highest-order bound species first:

(RL)*

eq2_6;
solve(%,RLstareq):
%:
eq3_1:= RLstareq=%  Substitute into the mass conservation laws:

eq2_1;
% | eq3_1:
eq3_2:= %  eq2_2;
% | eq3_1:
eq3_3:= %  Express next-lower bound order species:

RL

eq2_3;
solve(%,RLeq):
%:
eq3_4:= RLeq = %  Substitute into new mass-conservation laws

eq3_2;
% | eq3_4:
eq3_5:= %  eq3_3;
% | eq3_4:
eq3_6:= %  Express isomers

R*

eq2_4;
solve(%,Rstareq):
%:
eq3_7:= Rstareq = %  -> conservation laws

eq3_5;
% | eq3_7:
eq3_8:= %  L*

eq2_5;
solve(%, Lstareq):
%:
eq3_9:= Lstareq = %  -> conservation laws

eq3_6;
% | eq3_9:
eq3_10:= %  Aim to obtain  Rtot=f(Leq, constants) function

express Req

eq3_10;
solve(%,Req):
%:
eq3_11:= Req = %  substitute in Rtot=f(...)

eq3_8;
% | eq3_11;
temp1:=%;
temp2:=Simplify(%);
// test
temp1=temp2;
Simplify(%);
// Assemble a final equation
eq3_12:= Rtot =temp2       Attempt to solve for Leq

solution3_12:=solve(eq3_12, Leq) Extract solutions

solution_lines:=4:
eq3_13:=  solution3_12[i,1] \$ i=1..solution_lines;
nops(%)  Is 1st solution a combination of 2nd and 3rd?

solution1:=eq3_13;   // a sequence of roots
solution2:=eq3_13;  // extract equation out of a sequence
solution3:=eq3_13;   // extract equation out of a sequence

if solution2 in solution1
then print(Unquoted,"First set of roots contains the second root.");
else print(Unquoted,"First  set of roots  DOES NOT contain the second root!");
end_if;

if solution3 in solution1
then print(Unquoted,"First set of roots contains the third root.");
else print(Unquoted,"First  set of roots  DOES NOT contain the third root!");
end_if;   First  set of roots  DOES NOT contain the second root!
First  set of roots  DOES NOT contain the third root!

Check correctness of the solution by substitution

// Check the 2nd root
test1:=eq3_12 | Leq=solution2;
normal(%);  good

// Check the 3rd root
test1:=eq3_12 | Leq=solution3;
normal(%);  good

=> BOTH SOLUTIONS ARE CORRECT.

Test which solution is meaningful

solution2 | K_A_1=1 | K_B_1=1 | K_B_2=1 | K_B_3=1 | Rtot=1 | Ltot=1;
float(%)  meaningless

solution3 | K_A_1=1 | K_B_1=1 | K_B_2=1 | K_B_3=1 | Rtot=1 | Ltot=1;
float(%)  => MEANINGFUL

Choose as a final solution

eq3_14:= Leq = solution3 Summary of equations for all species

Leq_U_R_L_RL:=eq3_14 Req_U_R_L_RL:=eq3_11 Rstareq_U_R_L_RL:=eq3_7 Lstareq_U_R_L_RL:=eq3_9 RLeq_U_R_L_RL:=eq3_4 RLstareq_U_R_L_RL:=eq3_1 Create functions for computing concentrations

Here I only check that the results are numerically meaningful--functions were created right. Scientific meaningfulness will be analyzed in a separate notebook 'Analysis'.

(use --> to force direct substitution):

fLeq_U_R_L_RL:= (Rtot, Ltot, K_A_1, K_B_1, K_B_2, K_B_3) --> Leq_U_R_L_RL //test operation
fLeq_U_R_L_RL(1,1,10,100,1000,1):
float(%) => OK

fReq_U_R_L_RL:=(Rtot, Ltot, K_A_1, K_B_1, K_B_2, K_B_3) --> Req_U_R_L_RL | Leq_U_R_L_RL //test operation
fReq_U_R_L_RL(1,1,10,100,1000,1):
float(%) => OK

fRstareq_U_R_L_RL:=(Rtot, Ltot, K_A_1, K_B_1, K_B_2, K_B_3) --> Rstareq_U_R_L_RL | Req_U_R_L_RL | Leq_U_R_L_RL //test operation
fRstareq_U_R_L_RL(1,1,10,100,1000,1):
float(%) => OK

fLstareq_U_R_L_RL:=(Rtot, Ltot, K_A_1, K_B_1, K_B_2, K_B_3) --> Lstareq_U_R_L_RL | Leq_U_R_L_RL //test operation
fLstareq_U_R_L_RL(1,1,10,100,1000,1):
float(%) => OK

fRLeq_U_R_L_RL:=(Rtot, Ltot, K_A_1, K_B_1, K_B_2, K_B_3) --> RLeq_U_R_L_RL | Req_U_R_L_RL | Leq_U_R_L_RL //test operation
fRLeq_U_R_L_RL(1,1,10,100,1000,1):
float(%) => OK

fRLstareq_U_R_L_RL:=(Rtot, Ltot, K_A_1, K_B_1, K_B_2, K_B_3) --> RLstareq_U_R_L_RL | RLeq_U_R_L_RL | Req_U_R_L_RL | Leq_U_R_L_RL //test operation
fRLstareq_U_R_L_RL(1,1,10,100,1000,1):
float(%) => OK

Back to Contents

5. Save results on disk

(you can retrieve them later by executing: fread(filename,Quiet))

ProjectName filename:=CurrentPath.ProjectName.".mb";
write(filename,
// Equations
Leq_U_R_L_RL,
Req_U_R_L_RL,
Rstareq_U_R_L_RL,
Lstareq_U_R_L_RL,
RLeq_U_R_L_RL,
RLstareq_U_R_L_RL,
// Analytical functions
fLeq_U_R_L_RL,
fReq_U_R_L_RL,
fRstareq_U_R_L_RL,
fLstareq_U_R_L_RL,
fRLeq_U_R_L_RL,
fRLstareq_U_R_L_RL
) Error: Cannot write to file '/Users/kovrigin/Documents/Workspace/Global Analysis/code_development/Mathematical_models/Equilibrium_thermodynamic_models/U-R-L-RL/U-R-L-RL.mb'. [write]

Back to Contents

Conclusions

1. Analytical solution obtained.

2. Functions for analysis of behavior of solutions are created and saved.

Back to Contents