功能:采用Gauss与Lorentz函数进行混合多峰值拟合

格式:
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax,cMin,q0,qMax,qMin,r0,rMax,rMin,Nbird,LoopSum,Error)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax,cMin,q0,qMax,qMin,r0,rMax,rMin,Nbird,LoopSum)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax,cMin,q0,qMax,qMin,r0,rMax,rMin,Nbird)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax,cMin,q0,qMax,qMin,r0,rMax,rMin)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax,cMin,q0,qMax,qMin,r0,rMax)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax,cMin,q0,qMax,qMin,r0)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax,cMin,q0,qMax,qMin)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax,cMin,q0,qMax)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax,cMin,q0)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax,cMin)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0,cMax)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin,c0)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax,bMin)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0,bMax)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m,b0)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n,m)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y,n)
[er,y0,a,b,c,p,q,r,l]=MultiPeakFit(x,y)

x:需要拟合的已知数据矩阵
y:与x同维数的已知矩阵变量
n:表示Gauss函数峰的个数,默认为1
m:表示Lorentz函数峰的个数,默认为0
b0:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为n),表示Gauss峰函数里变量b的初始迭代值,默认为4
bMax:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为n),表示Gauss峰函数里变量b的上限值,默认为32
bMin:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为n),表示Gauss峰函数里变量b的下限值,默认为-32
c0:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为n),表示Gauss峰函数里变量c的初始迭代值,默认为50
cMax:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为n),表示Gauss峰函数里变量c的上限值,默认为200
cMin:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为n),表示Gauss峰函数里变量c的下限值,默认为1
q0:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为m),表示Lorentz峰函数里变量q的初始迭代值,默认为4
qMax:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为m),表示Lorentz峰函数里变量q的上限值,默认为100
qMin:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为m),表示Lorentz峰函数里变量q的下限值,默认为-100
r0:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为m),表示Lorentz峰函数里变量r的初始迭代值,默认为4
rMax:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为m),表示Lorentz峰函数里变量r的上限值,默认为100
rMin:数据或者矩阵变量(如果为矩阵变量,矩阵里元素个数为m),表示Lorentz峰函数里变量r的下限值,默认为0.00001
Nbird:迭代种群数,默认为100
LoopSum:总循环次数,默认3000
Error:误差控制变量,默认1e-12

er:返回的误差
y0:返回的常数项值,具体含义可看说明
a:返回的系数a,具体含义可看说明
b:返回的系数b,具体含义可看说明
c:返回的系数c,具体含义可看说明
p:返回的系数p,具体含义可看说明
q:返回的系数q,具体含义可看说明
r:返回的系数r,具体含义可看说明
l:返回程序终止时的迭代次数

说明:

1、本函数针对如下问题进行拟合系数y0,a,b,c,p,q,r

y = y0 + a[1]*exp(-((x-b[1])/c[1])^2) + a[2]*exp(-((x-b[2])/c[2])^2) + …… + a[n]*exp(-((x-b[n])/c[n])^2)
       + p[1]/((x-q[1])^2+r[1]) + p[2]/((x-q[2])^2+r[2]) + …… + p[m]/((x-q[m])^2+r[m])

2、本函数内部调用{nlinFit2<矩阵运算\nlinFit2>}与{SolveEquationGauss<矩阵运算\SolveEquationGauss>}函数

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

例子:

x=0:0.2:10;
y=4.5-2*exp(-((x-6)/4)^2)+12*exp(-((x+2)/8)^2);
//假如上面是我们原始的数据

[er,y0,a,b,c,k,k,k,l]=MultiPeakFit(x,y,2)//回车得到如下结果,注意当中的k变量只是为了简单过度,其目的是为了获得迭代次数l
er =
[ 7.6019999953E-13 ]
y0 =
[ 4.49996356818286 ]//准确值4.5
a =
[-2.00010764240004    12.0000546022300 ]//准确值 a = [-2 ， 12 ]
b =
[ 5.99999038863690   -2.00001889350037 ]//准确值 b = [ 6 , -2 ]
c =
[ 4.00004797652415    8.00013139995208 ]//准确值 c = [ 4 , 8 ]
l =
[ 1380.00000000000 ] //总共迭代次数