高斯拟合代码

高斯拟合(Gaussian Fitting)即使用形如:
     
          Gi(x)=Ai*exp((x-Bi)^2/Ci^2)

        的高斯函数对数据点集进行函数逼近的拟合方法。

        其实可以跟多项式拟合类比起来,不同的是多项式拟合是用幂函数系,
        而高斯拟合是用高斯函数系。

        使用高斯函数来进行拟合,优点在于计算积分十分简单快捷。这一点
        在很多领域都有应用,特别是计算化学。著名的化学软件Gaussian98
        就是建立在高斯基函数拟合的数学基础上的。

 

private float gaussFit(Point[] point)
        {
            int countNum = point.Length;

            double[,] a = new double[countNum, 3];
            double[] b = new double[countNum];// Z1....Zn
            for (int i = 0; i < countNum; i++)
            {
                b[i] = (float)(Math.Log(point[i].Y));
                a[i, 0] = 1;
                a[i, 1] = point[i].X;
                a[i, 2] = a[i, 1] * a[i, 1];
            }
            var matrixA = new DenseMatrix(a);
            var matrixB = new DenseVector(b);
            var matrixC = matrixA.QR().Solve(matrixB);

            float S = (float)(-1 / matrixC[2]);
            float xMax = (float)(matrixC[1] * S / 2.0);  //峰值位置
            //double yMax = Math.Exp(matrixC[0] + xMax * xMax / S);  
            return xMax;
        }
View Code
原文地址:https://www.cnblogs.com/zhayunjia/p/9006900.html