功能:采用遗传算法对自然指数函数拟合

格式:
[y0,a,b,c,er,m]=ExpFitGA(x,y,n,b0,c0,bMax,bMin,cMax,cMin,Nbird,LoopSum,Error)
[y0,a,b,c,er,m]=ExpFitGA(x,y,n,b0,c0,bMax,bMin,cMax,cMin,Nbird,LoopSum)
[y0,a,b,c,er,m]=ExpFitGA(x,y,n,b0,c0,bMax,bMin,cMax,cMin,Nbird)
[y0,a,b,c,er,m]=ExpFitGA(x,y,n,b0,c0,bMax,bMin,cMax,cMin)
[y0,a,b,c,er,m]=ExpFitGA(x,y,n,b0,c0,bMax,bMin,cMax)
[y0,a,b,c,er,m]=ExpFitGA(x,y,n,b0,c0,bMax,bMin)
[y0,a,b,c,er,m]=ExpFitGA(x,y,n,b0,c0,bMax)
[y0,a,b,c,er,m]=ExpFitGA(x,y,n,b0,c0)
[y0,a,b,c,er,m]=ExpFitGA(x,y,n,b0)
[y0,a,b,c,er,m]=ExpFitGA(x,y,n)
[y0,a,b,c,er,m]=ExpFitGA(x,y)

x:需要拟合的自变量数据(矩阵变量)
y:需要拟合的因变量数据(矩阵变量)
n:需要拟合的函数个数,默认为1,具体含义看说明
b0:数据或者矩阵变量,表示表达式当中b的初始迭代值,如果为矩阵变量,其元素个数为n
c0:数据或者矩阵变量,表示表达式当中c的初始迭代值,如果为矩阵变量,其元素个数为n
bMax:数据或者矩阵变量,表示表达式当中b的迭代值的上限,默认为100,如果为矩阵变量,其元素个数为n
bMin:数据或者矩阵变量,表示表达式当中b的迭代值的下限,默认为-100,如果为矩阵变量,其元素个数为n
cMax:数据或者矩阵变量,表示表达式当中c的迭代值的上限,默认为100,如果为矩阵变量,其元素个数为n
cMin:数据或者矩阵变量,表示表达式当中c的迭代值的下限,默认为-100,如果为矩阵变量,其元素个数为n
Nbird:种群数,默认200
LoopSum:最大迭代次数,默认3000
Error:误差控制变量,默认1E-16

y0:返回的系数y0的值
a:返回的系数a的值
b:返回的系数b的值
c:返回的系数c的值
er:返回的均方误差和
m:返回程序终止的迭代次数

说明:

1、本函数主要求解下面这一类函数,表达式当中的n对应上面格式中输入的参数n

y = y0 + a[1]*exp(b[1]*x+c[1]*x^2) + a[2]*exp(b[2]*x+c[2]*x^2) + …… + a[n]*exp(b[n]*x+c[n]*x^2)

2、因为本函数内部对算法做了特殊处理,因此求解时比直接调用相关的非线性拟合函数求解要快!

3、注意对于表达式 exp(b*x+c*x^2+d) = exp(b*x+c*x^2)*exp(d) = exp(b*x+c*x^2)*a ,这里 a=exp(d)

4、如果只想拟合类似 y = y0 + a*exp(b*x) 这种表达式,那可以将cMax,cMin参数均设置为0即可

例子:

//为了便于演示,这里就先事先产生一组数据

x=0:0.1:5; y=5+6*exp(4*x-8*x^2);//回车即产生一组(x,y)数据,这组数据y0=5,a=6,b=4,c=-8

[y0,a,b,c,er,m]=ExpFitGA(x,y)//因为我们只拟合一组数据,因此可直接采用默认方式，回车得到如下结果,当然也可以设置相应参数的范围
y0 =
[ 5.00000000017300 ]
a =
[ 5.99999999508852 ]
b =
[ 4.00000000660456 ]
c =
[-8.00000000997583 ]
er =
[ 4.9607443875E-17 ]
m =
[ 14.0000000000000 ]

//By 2015/2/2