I have the following optimised reaction based on experiments: A + 1.7B -> C (A = Rifamycin Oxazine; B = Piperazine; C = Rifampicin)
My postulated rate law is therefore:
r_A = -k*C_A*C_B^1.7
r _B= -k*C_A*C_B^1.7
r _C= k*C_A*C_B^1.7
Using my experimental data, I have used the following code to try and accurately find k (the goal is to get an R^2 > 90%):
function API2function C=kinetics(theta,t)c0=[0.752;1.278;0];[T,Cv]=ode45(@DifEq,t,c0);%
function dC=DifEq(t,c) dcdt=zeros(3,1); dcdt(1)=-theta(1).*(c(1).^(1)).*(c(2).^(1.7)); dcdt(2)=-theta(1).*(c(1).^(1)).*(c(2).^(1.7)); dcdt(3)=theta(1).*(c(1).^(1)).*(c(2).^(1.7)); dC=dcdt; endC=Cv;endT = [0 1 2 5 10 15];t = T';%y values for a
a_ydata = [0.752 0.0596 0.0596 0.0596 0.0502 0.0424];A_Ydata = a_ydata';%y values for b
b_ydata = [1.278 0.378 0.101 0.101 0.085 0.072];B_Ydata = b_ydata';c_ydata = [0 0.692 0.692 0.692 0.702 0.71];C_Ydata = c_ydata';c = [A_Ydata B_Ydata C_Ydata];theta0=[0.5];[theta,Rsdnrm,Rsd,ExFlg,OptmInfo,Lmda,Jmat]=lsqcurvefit(@kinetics,theta0,t,c);fprintf(1,'\tRate Constants:\n')for k1 = 1:length(theta) fprintf(1, '\t\tTheta(%d) = %8.5f\n', k1, theta(k1))endtv = linspace(min(t), max(t));Cfit = kinetics(theta, tv);figure(1)h = plot(t, c,'.');set(h,{'Marker'},{'s';'d';'^'},{'MarkerFaceColor'},{'r';'b';'k'},{'MarkerEdgeColor'},{'r';'b';'k'});hold onhlp = plot(tv, Cfit,'LineWidth',1.5);set(hlp,{'Color'},{'r';'b';'k'});hold offgridxlabel('Time (min)')ylabel('Concentration (M)')legend(hlp, 'Rifamycin Oxazine', 'Piperazine', 'Rifampicin', 'Location','N')end
However, when I run the code and produce a graph, there seems to be a clear discrepancy between my simulated curve and my experimental data (especially for piperazine). I have been messing around with the code but can't seem to get it to fit well with my data. I'm not sure what to do. Can anyone help me?
Best Answer