Fitting Titration Data with an Implicit Function
2 views (last 30 days)
Show older comments
I want to fit my data to the following model:
[H+] =Bo*Vo/(Vo+Va) + kw/[H+] + [H+]*k1*Co*Vo/(([H+]^2 + k1*[H+]+k1*k2)*(Vo+Va) + 2*k1*k2*Co*Vo/(([H+]^2+k1*[H+]+k1*k2)*(Vo+Va) + Ao*Va/(Vo+Va);
where Ao, Bo, Co, Vo, kw are all known and the independent variable is Va.
I have data giving me values of Va and [H+], but I am stuck trying to figure out how to do nonlinear regression with an implicit function
Here is my code so far:
if true
lowerBound = [0 0]; %[A B]
upperBound = [10 10];
lsqoptions = optimset('MaxFunEvals',10000000,'MaxIter',10000000,'TolFun',1E-12);
[coeffs, resnorm, residual] = lsqcurvefit(@Titration_Model, initial_ks, x, CleanData, lowerBound, upperBound, lsqoptions);
end
and my function is:
if true
function H = Titration_Model(coeffs,xdata)
Bo = 0.00075;
Vo = 0.03;
Va = xdata;
kw = 1E-14;
Co = 0.000234;
Ao = 0.05;
H = -Bo*Vo/(Vo+Va(i))+kw/H+H*coeffs(1)*Co*Vo/((H^2 ...
+coeffs(1)*H+coeffs(1)*coeffs(2))*(Vo+Va(i))) + 2*coeffs(1)*coeffs(2)*Co*Vo/...
((H^2+coeffs(1)*H+coeffs(1)*coeffs(2))*(Vo+Va(i)))+Ao*Va(i)/(Vo+Va(i));
end
Any assistance would be appreciated
0 Comments
Answers (1)
Star Strider
on 7 Feb 2017
It would be helpful to know the equation(s) you began with. If I remember my chemical kinetics correctly, you should be able to isolate the hydrogen ion concentration on one side of the equation.
In any event, do not subscript ‘Va’, and do element-wise operations (with the dot (.) operator) unless you intend to do matrix operations.
Example:
H = H-Bo*Vo./(Vo+Va)+kw./H+H.*coeffs(1).*Co.*Vo./((H.^2 ...
+coeffs(1).*H+coeffs(1).*coeffs(2)).*(Vo+Va(i))) + 2*coeffs(1).*coeffs(2).*Co*Vo./...
((H.^2+coeffs(1).*H+coeffs(1).*coeffs(2)).*(Vo+Va))+Ao.*Va./(Vo+Va);
You may not need vectorise every operation, but it can help.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!