﻿功能:高斯函数拟合

格式:
[a,er]=GaussFit(x,y,Other)
[a,er]=GaussFit(x,y)

x:矩阵数据
y:与x对应的矩阵数据
Other:矩阵变量或者任何其它数据,当为矩阵变量时,此矩阵变量为4*2的矩阵,第1列存储拟合值上限,第2列存储拟合值下限

a:返回拟合的系数
er:返回的残差平方和

说明:

1、GaussFit(x,y)

表示对函数 y=a*exp(-(x-b)^2/c^2) 当中的a、b、c变量进行拟合,其中满足的要求是a>0,c>0

原理:最终转换成多项式进行拟合

2、GaussFit(x,y,Other)

表示对函数 y=a*exp(-(x-b)^2/c^2)+d 当中的a、b、c、d变量进行拟合,其中满足的要求是a>0,c>0

此时,如果Other变量为一矩阵,则此矩阵为4*2的矩阵,此矩阵的每一行分别限制a、b、c、d拟合值的上下限,如果知道大致区间,在限制区间里拟合,可以更快得到较好的结果,程序默认自己定义限制区间

原理:采用{nlinFit2<矩阵运算\nlinFit2>}函数进行拟合,因为是智能算法,因此在求解结果不理想时,可以尝试重复执行本函数,也许你会得到更好的结果。当然,也可以尝试函数{MultiPeakFit<矩阵运算\MultiPeakFit>}进行拟合

例子:

//本例子来自{小木虫<http://emuch.net/html/201310/6486206.html>},注意最终拟合的结果和上面算式的变换

//已知如下两组数据,他们满足y=a*exp(-(x-b)^2/c^2)+d ,请拟合出a、b、c、d

x =
[ 325.000000000000
  350.000000000000
  375.000000000000
  400.000000000000
  425.000000000000
  450.000000000000
  475.000000000000
  500.000000000000
  525.000000000000
  550.000000000000 ]
y =
[ 11.1000000000000
  18.9000000000000
  25.3000000000000
  27.6000000000000
  24.5000000000000
  18.9000000000000
  12.0000000000000
  6.80000000000000
  3.40000000000000
  1.50000000000000 ]

[a,er]=GaussFit(x,y,1)//假如系统已经有x、y数据,我们执行命令后得到如下结果,注意,参数1没有什么意义,主要是告诉程序我们要采用第二个函数拟合,即a=26.5153665385238,b=400.407929360544,c=79.2408550677517,d=0.97625881889527,残差平方和=1.11569907390255
a =
[ 26.5153665385238    400.407929360544    79.2408550677517    0.97625881889527 ]
er =
[ 1.11569907390255 ]