How to code two function that is separated by time

1 view (last 30 days)
Hi,
I try to code the attached equation but unable to get it work correctly. My goal is to plot those two function in one figure.
Here's my original code:
%calculate the plasma pharmacokinetics for continous injection
% I used term... to simplify the long formula
Dd = 50;
Td = 3600;
A1 = 74.6;
alpha1 = 2.43*(10^(-3));
A2 = 2.49;
alpha2 = 2.83*(10^(-4));
A3 = 0.552;
alpha3 = 1.18*(10^(-5));
t = 0:32400;
term1 = (A1/alpha1)*(1-(exp(-alpha1*t)));
term2 = (A2/alpha2)*(1-(exp(-alpha2*t)));
term3 = (A3/alpha3)*(1-(exp(-alpha3*t)));
term4 = (A1/alpha1).*((exp(-alpha1*t))-1).*(exp(-alpha1*t));
term5 = (A2/alpha2).*((exp(-alpha2*t))-1).*(exp(-alpha2*t));
term6 = (A3/alpha3).*((exp(-alpha3*t))-1).*(exp(-alpha3*t));
if (t<Td)
Cv=(Dd/Td).*(term1+term2+term3);
elseif (t>Td)
Cv=(Dd/Td).*(term4+term5+term6);
end
%calculate free doxorubicin concentration in plasma (Cfp)
s = 0.25;
Cfp = s*Cv;
figure(1);plot (t/3600,Cfp); hold on
%calculate bound doxorubicin concentration in plasma (Cfp)
Cbp = (1-s)*Cv;
plot (t/3600,Cbp);
ylabel ('Concentration Doxorubicin in Plasma for Continuous Injection ');
xlabel ('Time (hours)');
legend('Cfp=free doxorubicin','Cbp=bound doxorubicin');

Accepted Answer

Guillaume
Guillaume on 11 Jun 2015
Edited: Guillaume on 11 Jun 2015
If you wanted to use an if ... else construct you would have to do that in a for loop. Furthermore, you would not be using an elseif, just an else as at the moment you're missing the case where t == Td.
In any case, you don't need an if ... else and you don't want to use a for loop as that would slow your code for no benefit. The way to do it is by using a logical array for indexing:
Cv = zeros(size(t)); %Initialise Cv
Cv(t<Td) = (Dd/Td).*(term1(t<Td) + term2(t<Td) + term3(t<Td));
Cv(t>=Td) = (Dd/Td).*(term4(t>=Td) + term5(t>=Td) + term6(t>=Td));
%the logical indices are t<Td and t>=Td respectively
  1 Comment
Rendy Dalimunthe
Rendy Dalimunthe on 12 Jun 2015
Hi Guillaume,
Thanks for your answer. It works. I also made my own adjustment like below and it's also work.
Cv=(t<Td).*((Dd/Td)*(term1+term2+term3))+(t>=Td).*((Dd/Td)*(term4+term5+term6));

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!