function [t,CAtot,CBtot,y] = equilibrium_diff(DoseA,DoseB,tend,P) %DoseA=IV bouls dose of drug A. %DoseB=IV bolus dose of drug B. %tend=tast time point for simulations. %P=vector of model parameters (see below). %t=column vector of times for soultions. %y=length(t)x5 matrix of solutions: % y(:,1)=CA % y(:,2)=ATA % y(:,3)=CB % y(:,4)=ATB % y(:,5)=Rtot %CAtot=column vector of total drug A concentrations. %CBtot=column vector of total drug B concentrations. % Model parameters. Vc =P(1); kelA =P(2); kelB =P(3); ktpA =P(4); ktpB =P(5); kptA =P(6); kptB =P(7); kintA=P(8); kintB=P(9); KDA =P(10); KDB =P(11); kdeg =P(12); Rtot0=P(13); CA0 =P(14); CB0 =P(15); % Model secondary parameters RCA0=Rtot0*CA0/KDA/(1+CA0/KDA+CB0/KDB); RCB0=Rtot0*CB0/KDB/(1+CA0/KDA+CB0/KDB); CAtot0=CA0+RCA0; CBtot0=CB0+RCB0; InA0=kelA*CA0+kintA*RCA0; InB0=kelB*CB0+kintB*RCB0; ATA0=kptA*Vc*CA0/ktpA; ATB0=kptB*Vc*CB0/ktpB; ksyn=kdeg*(Rtot0-RCA0-RCB0)+kintA*RCA0+kintB*RCB0; % Initial conditions. [CA_0,CB_0] = equilibrium_trig(Rtot0,CAtot0+DoseA/Vc,CBtot0+DoseB/Vc,KDA,KDB); IC=[CA_0;ATA0;CB_0;ATB0;Rtot0]; % solving model ODEs over time interval [0, tend]. RelTol=10^(-8);% default 10^(-3) AbsTol=10^(-8);% default 10^(-6) options = odeset('RelTol',RelTol,'AbsTol',AbsTol); [t,y]=ode45(@model,[0:0.1:tend],IC,options); % Calculating CA and CB based on the model variables:CAtot,CBtot, Rtot. CAtot=t; CBtot=t; for i=1:length(t) CA =y(i,1); ATA =y(i,2); CB =y(i,3); ATB =y(i,4); Rtot =y(i,5); CAtot(i)= CA+Rtot*CA/KDA/(1+CA/KDA+CB/KDB); CBtot(i)= CB+Rtot*CB/KDB/(1+CA/KDA+CB/KDB); end % Model ODEs. function [dydt] = model(t,y); CA =y(1); ATA =y(2); CB =y(3); ATB =y(4); Rtot =y(5); CAtot= CA+Rtot*CA/KDA/(1+CA/KDA+CB/KDB); CBtot= CB+Rtot*CB/KDB/(1+CA/KDA+CB/KDB); E=Rtot-CAtot-CBtot+CA+CB+KDA; F=Rtot-CAtot-CBtot+CA+CB+KDB; CPAtot=InA0-(kelA+kptA)*CA+ktpA*ATA/Vc-kintA*(CAtot-CA); CPBtot=InB0-(kelB+kptB)*CB+ktpB*ATB/Vc-kintB*(CBtot-CB); RPtot= ksyn-kdeg*Rtot-(kintA-kdeg)*(CAtot-CA)-(kintB-kdeg)*(CBtot-CB); CPA=KDA*F*CPAtot-F*CA*(RPtot-CPAtot-CPBtot)+KDA*CB*CPAtot-KDB*CA*CPBtot; CPA=CPA/(E*F+F*CA+E*CB); CPB=KDB*E*CPBtot-E*CB*(RPtot-CPAtot-CPBtot)+KDB*CA*CPBtot-KDA*CB*CPAtot; CPB=CPB/(E*F+F*CA+E*CB); dydt=[CPA; kptA*Vc*CA-ktpA*ATA; CPB; kptB*Vc*CB-ktpB*ATB; RPtot]; end % End of function agonism_diff end function [ CA,CB ] = equilibrium_trig(Rtot,CtotA,CtotB, KDA,KDB ) % This function solves the equilibrium equations using roots function % to find the only solution z to the equlibrium polynomial such that % 0 < z & z < 1 & z < aA+aB. aA=CtotA/Rtot; aB=CtotB/Rtot; kA=KDA/Rtot; kB=KDB/Rtot; if (kA == kB) % root of z^2+b*z+c=0 b=-(1+aA+aB+kA); c=aA+aB; z=(-b-sqrt(b^2-4*c))/2; else % root of z^3+b*z^2+c*z+d=0 b=-(2+kA+kB+aA+aB); c=1+2*aA+2*aB+kA+kB+kB*aA+kA*aB+kA*kB; d=-(kB*aA+kA*aB+aA+aB); Q=(3*c-b^2)/9; R=(9*b*c-27*d-2*b^3)/54; theta=acos(R/sqrt(-Q^3)); pi=3.1415926535897; p(1)=-b/3+2*sqrt(-Q)*cos(theta/3); p(2)=-b/3+2*sqrt(-Q)*cos(theta/3+2*pi/3); p(3)=-b/3+2*sqrt(-Q)*cos(theta/3+4*pi/3); if (0