Matlab使用lsqcurvefit函数拟合已知函数方程组求解常数项(附代码)

    科技2022-08-08  106

    前排观看提示:非数学专业,丑逼工科男一只,写的辣鸡勿喷(但凡数值分析课好好听了,我就不会来写这个博客了/(ㄒoㄒ)/~~)

    问题

    XXX材料吸附多组分重金属离子(同时吸附5种离子),拟合以下扩展的freundlish方程(方程本身是前人总结得出),求解qm1~ qm5,KL1~ KL5。

    数据

    代码(Matlab)

    0 5.4842 8.2264 16.3496 37.063 59.332 73.913 80.636 97.492 103.406]; 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 0 62.73667 90.69667 258.96667 297.725 336.48333 466.46667 524.36667 530.26667 370.66667 0 36.39611 60.08722 129.14611 282.16889 288.55667 322.49389 396.23111 404.001665 411.77222 0 55 61 111 248.62889 354.30333 419 419.3333335 419.6666667 420 0 1.63611 16.37222 62.31111 109.82222 107.86667 184.78889 154.71111 176.63333 150.72222 0 0 13.06278 61.00889 72.28444 76.37667 92.64778 122.58556 149.15667 115.01111 0 83.02239 145.87164 296.24776 594.6209 891.7806 1043.01343 1192.79851 1341.264179 1483.09305 0 84.49801 147.24975 295.46965 593.74527 891.25672 1043.2796 1192.97711 1241.444109 1289.91111 0 77.47562 144.91095 293.47861 578.15721 872.34328 1003.59154 1017.09353 942.83284 1123.66169 0 74.50896 131.64776 238.32836 327.537295 416.74627 324.08955 436.80597 349.97015 360.199 0 11.43184 47.72488 96.06169 88.13532 100.7701449 107.08756 135.28557 103 151.05473 0 83.9194 146.78955 297.11343 594.3806 882.82985 1039.3597 1192.74776 1526.72188 1336.091045 0 83.60398 149.24975 298.52338 597.01542 895.52836 1044.77662 1194.02786 1241.374224 1288.72059 0 80.09502 144.599 295.001 576.69453 865.61343 991.41244 1012.16816 956.17612 1108.73632 0 70.91493 133.19403 249.67761 330.5999818 411.52239 370.95522 419.9403 390.1194 386.46766 0 4.65572 50.23682 102.01393 138.89652 152.56119 127.95323 180.62886 183.72239 186.81592]; DATA=[1011.904942 11571.57123 10705.0398 4865.864951 2619.395147 0.017338578 0.001000206 0.001504976 0.001007418 0.001005335 1013.071376 12822.94698 8746.83957 4633.909823 3104.771067 0.016470391 0.001000875 0.001699102 0.001001411 0.001000319 170247.1454 5353.579627 5678.337205 10775.36241 2743.452705 0.001000008 0.026198215 0.012310982 0.001000103 0.001000599 169350.4831 3472.87155 25180.28198 11099.38625 3764.922701 0.001000033 0.040290896 0.00257323 0.001000151 0.001000771 ]; 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

    结果

    哦豁,下班淦饭。

    Processed: 0.012, SQL: 8