转载:https://www.cnblogs.com/hyb965149985/p/10102335.html
拟合初值的选取问题
(来源:http://blog.163.com/shikang999@126/blog/static/172624896201463111856714/)
因为初值对拟合速度甚至结果有一定影响,因此这里就简单说一下确定数学模型后,拟合非线性问题时,初值的选取的问题。
1、如果已知数学模型,有一定物理意义,则建议根据物理意义选取。
2、当无法确定初值时,且你的数学模型有导数(如果求导模型很复杂甚至没有导数,则可进行简单的差分构造),则可以采用如下的办法进行。
步骤:
(1)求出拟合函数的一阶导数【如果有必要可求更高阶导数】 ;
(2)使用已知数据求出近似点的一阶导数 ;
(3)代入一阶导数函数以及原函数求得初值近似值 ;
例子:
已知一组数据x、y满足如下关系式,求拟合数据a、b、c、d的初始近似值
y = a + b * (x - c) ^ d
步骤:
(1) y’ = b * d * (x - c) ^ (d - 1)
matlab 计算微分的方法:如对erf(x)
syms x %代表着声明符号变量x,只有声明了符号变量才可以进行符号运算,包括求导
diff(erf(x))%代表着对单变量函数求一阶导数
pretty(diff(erf(x)))%将当前变量显示为我们常用的书面形式
(2)因为已知x、y数据,则根据差分法( y’=(y2-y1)/(x2-x1) )求得一组x、y’ 的近似值,这里记 f = y’
(3)将x、y’ 代入(1)式的方程得到如下三个方程进而求解出b、c、d
f[1] = b * d * (x[1] - c) ^ (d - 1) ①
f[2] = b * d * (x[2] - c) ^ (d - 1) ②
f[3] = b * d * (x[3] - c) ^ (d - 1) ③
(4)取任意一组x、y然后将b、c、d一起代入原方程 y = a + b * (x - c) ^ d 进而可以求得近似值 a
(5)至此 a、b、c、d初始近似值确定完毕!