0.引言
就方程参数拟合问题而言,常见非线性方程(组)参数拟合和常微分方程(组)参数拟合两种。
本帖主要讨论常微分方程参数的拟合问题。限于本人水平,存在纰漏甚至错误在所难免,欢迎大家批评指正,同时希望能抛砖引玉。
1.影响拟合质量的因素
Origin软件的Help文档总结了影响拟合质量的主要因素,总共5条,列出如下:
(1)参数初值
(2)模型(公式)的正确性或者适用性
(3)迭代计算的中止的判断指标高低
(4)数据点的充分性
(5)数据点的噪声
实际上,拟合算法的先进性同样影响拟合的质量,在此基础上,加上一条:
(6)算法先进与否及其适用性
本帖主要讨论第一个因素,即参数初值,对拟合质量的影响。在本体后续的讨论中可以看到,参数初值的选取,对最终拟合结果影响相当显著。
2.本帖讨论的例子出处
本帖讨论的例子出处见:http://muchong.com/bbs/viewthread.php?tid=7595881&fpage=1
直观起见,对上述例子中的问题表述如下:
已知自变量t,因变量y,y和t满足一下函数式:
dy/dt=0.001414/(1/(4.5727*10^4*k1*(1-0.02119*y)^k2)+1/k3/45727);(需要指出的是,该公式中参数可进一步合并,在本帖中并未作合并处理)
已知 t=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14];
y=[20.4122 22.73032 24.55624 25.88679 26.69019 27.16334 27.45866 27.64919 27.57615 27.70635 27.77303 27.86195 27.91911 27.95721 27.98897];
拟合出参数k1,k2,k3。
3.结果与讨论
运行MATLAB软件,调用lsqnonlin函数和ode45函数,参数初值按k1=k2=k3=1选取,程序代码如下:CODE:
function KineticsEst1_Int_modified_by_Yuezhilan
clear all;clc
format long
tspan=[31 32 33 34 35 36 37 38 39 40 41 42 43 44 45]-31;
yexp=[22.73032 24.55624 25.88679 26.69019 27.16334 27.45866 27.64919 27.57615 27.70635 27.77303 27.86195 27.91911 27.95721 27.98897]';
k0=[1 1 1]; %%%请注意这里,初值的选取
y0=20.4122;
lb=-[1 1 1]*1e3;
ub=[1e12 1000 1];
yy=[y0 yexp'];
[k,resnorm,residual,exitflag,output,lambda,jacobian] = ...
lsqnonlin(@ObjFunc,k0,lb,ub,[],tspan,y0,yexp);
fprintf('\n\n使用函数lsqnonlin()估计得到的参数值为:\n')
fprintf(