前排观看提示:非数学专业,丑逼工科男一只,写的辣鸡勿喷(但凡数值分析课好好听了,我就不会来写这个博客了/(ㄒoㄒ)/~~)
问题
XXX材料吸附多组分重金属离子(同时吸附5种离子),拟合以下扩展的freundlish方程(方程本身是前人总结得出),求解qm1~ qm5,KL1~ KL5。
数据
(这里图片中数据给大家解释一下,这里的Ce就是下文代码中的DATAx,qe就是下文中Datay,而且下文中的代码中并未放置DATAx的数据需要输入上方图片中的数据。)
代码(Matlab)
DATAy=[0 66.63833 131.71 285.57667 457.38667 437.6911133 398.3 509.53333 389.76667 467.66667
0 38.22278 61.01556 175.27778 281.40222 274.17333 333.52722 286.85611 367.20167 355.48889
0 33.59611 43.53056 116.43444 223.55556 372.85333 416.96222 456.35444 498.03 501
0 1.50278 15.81389 56.50278 94.17889 106.36667 186.28889 187.46111 179.18333 160.88889
0 0 9.44944 52.52556 52.92444 74.87667 82.93111 98.71889 122.44 99.52778];
DATA=[1011.904942 11571.57123 10705.0398 4865.864951 2619.395147 0.017338578 0.001000206 0.001504976 0.001007418 0.001005335];%这里的DATA是指一开始放入的初始解,也就是输入的初值(初始值对拟合结果的影响很大)。
xdata1=DATAx(1:5,:)';
ydata1=DATAy(1:5,:)';
x01=DATA(1,:);
x1=lsqcurvefit(@myfun,x01,xdata1,ydata1,[zeros(1,5),0.001.*ones(1,5)],[50000.*ones(1,5),0.01.*ones(1,5)]);
KTNPs=x1';
R2TNPS=(1-(sum((myfun(x1,xdata1)-ydata1).^2)./sum((ydata1-mean(ydata1)).^2)))';
function y=myfun(x,xdata)
fun1=(x(1)*x(6)*xdata(:,1))./(1+x(6)*xdata(:,1)+x(7)*xdata(:,2)+x(8)*xdata(:,3)+x(9)*xdata(:,4)+x(10)*xdata(:,5));
fun2=(x(2)*x(7)*xdata(:,2))./(1+x(6)*xdata(:,1)+x(7)*xdata(:,2)+x(8)*xdata(:,3)+x(9)*xdata(:,4)+x(10)*xdata(:,5));
fun3=(x(3)*x(8)*xdata(:,3))./(1+x(6)*xdata(:,1)+x(7)*xdata(:,2)+x(8)*xdata(:,3)+x(9)*xdata(:,4)+x(10)*xdata(:,5));
fun4=(x(4)*x(9)*xdata(:,4))./(1+x(6)*xdata(:,1)+x(7)*xdata(:,2)+x(8)*xdata(:,3)+x(9)*xdata(:,4)+x(10)*xdata(:,5));
fun5=(x(5)*x(10)*xdata(:,5))./(1+x(6)*xdata(:,1)+x(7)*xdata(:,2)+x(8)*xdata(:,3)+x(9)*xdata(:,4)+x(10)*xdata(:,5));
y=[fun1,fun2,fun3,fun4,fun5];
end
结果
哦豁,下班淦饭。