高斯擬合代碼

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

        的高斯函數對數據點集進行函數逼近的擬合方法。

        其實能夠跟多項式擬合類比起來,不一樣的是多項式擬合是用冪函數系,
        而高斯擬合是用高斯函數系。

        使用高斯函數來進行擬合,優勢在於計算積分十分簡單快捷。這一點
        在不少領域都有應用,特別是計算化學。著名的化學軟件Gaussian98
        就是創建在高斯基函數擬合的數學基礎上的。ide

 

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
相關文章
相關標籤/搜索