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

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

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

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

c#中用mathnet 惊醒矩阵运算  实现方案

double[,] a = new double[fitDatas.Count, 3];double[] b = new double[fitDatas.Count];double[] X = new double[3] { 0, 0, 0 };for (int i = 0; i < fitDatas.Count; i++){b[i] = Math.Log(fitDatas[i].Intensity);a[i, 0] = 1;a[i, 1] = fitDatas[i].WaveLength;a[i, 2] = a[i, 1] * a[i, 1];}// Matrix.Equation(datas.Count, 3, a, b, X);MathNet.Numerics.LinearAlgebra.Matrix matrixA = new MathNet.Numerics.LinearAlgebra.Matrix(a);MathNet.Numerics.LinearAlgebra.Matrix matrixB = new MathNet.Numerics.LinearAlgebra.Matrix(b, b.Length);MathNet.Numerics.LinearAlgebra.Matrix matrixC = matrixA.Solve(matrixB);X = matrixC.GetColumnVector(0);double S = -1 / X[2];double xMax = X[1] * S / 2.0;double yMax = Math.Exp(X[0] + xMax * xMax / S);

运用c++实现方案

#include<iostream.h>#include<math.h>#include<stdlib.h>#include <windows.h>double f(int n,double x){             //f(n,x)用来返回x的n次方double y=1.0;if(n==0)return 1.0;else{for(int i=0;i<n;i++)y*=x;return y;}}int xianxingfangchengzu(double **a,int n,double *b,double *p,double dt)//用高斯列主元法来求解法方程组{int i,j,k,l;double c,t;for(k=1;k<=n;k++){c=0.0;for(i=k;i<=n;i++)if(fabs(a[i-1][k-1])>fabs(c)){c=a[i-1][k-1];l=i;}if(fabs(c)<=dt)return(0);if(l!=k){for(j=k;j<=n;j++){t=a[k-1][j-1];a[k-1][j-1]=a[l-1][j-1];a[l-1][j-1]=t;}t=b[k-1];b[k-1]=b[l-1];b[l-1]=t;}c=1/c;for(j=k+1;j<=n;j++){a[k-1][j-1]=a[k-1][j-1]*c;for(i=k+1;i<=n;i++)a[i-1][j-1]-=a[i-1][k-1]*a[k-1][j-1];}b[k-1]*=c;for(i=k+1;i<=n;i++)b[i-1]-=b[k-1]*a[i-1][k-1];}for(i=n;i>=1;i--)for(j=i+1;j<=n;j++)b[i-1]-=b[j-1]*a[i-1][j-1];cout.precision(12);for(i=0;i<n;i++)p[i]=b[i];}double** create(int a,int b)//动态生成数组{double **P=new double *[a];for(int i=0;i<b;i++)P[i]=new double[b];return P;}void zuixiaoerchengnihe(double x[],double y[],int n,double a[],int m){int i,j,k,l;double **A,*B;A=create(m,m);B=new double[m];for(i=0;i<m;i++)for(j=0;j<m;j++)A[i][j]=0.0;for(k=0;k<m;k++)for(l=0;l<m;l++)for(j=0;j<n;j++)A[k][l]+=f(k,x[j])*f(l,x[j]);//计算法方程组系数矩阵A[k][l]cout<<"法方程组的系数矩阵为:"<<endl;for(i=0;i<m;i++)for(j=0,k=1;j<m;j++,k++){cout<<A[i][j]<<'\t';if(k&&k%m==0)cout<<endl;}for(i=0;i<m;i++)B[i]=0.0;for(i=0;i<m;i++)for(j=0;j<n;j++)B[i]+=y[j]*f(i,x[j]);for(i=0;i<m;i++)cout<<"B["<<i<<"]="<<B[i]<<endl;//记录B[n]xianxingfangchengzu(A,m,B,a,1e-6);delete[]A;delete B;}double pingfangwucha(double x[],double y[],int n,double a[],int m)//计算最小二乘解的平方误差{double deta,q=0.0,r=0.0;int i,j;double *B;B=new double[m];for(i=0;i<m;i++)B[i]=0.0;for(i=0;i<m;i++)for(j=0;j<n;j++)B[i]+=y[j]*f(i,x[j]);for(i=0;i<n;i++)q+=y[i]*y[i];for(j=0;j<m;j++)r+=a[j]*B[j];deta=fabs(q-r);return deta;delete B;}       void main(void){int i,n,m;double *x,*y,*a;char ch='y';do{system("cls");cout<<"请输入所给拟合数据点的个数n=";cin>>n;cout<<"请输入所要拟合多项式的项数m=";cin>>m;while(n<=m){cout<<"你所输入的数据点无法确定拟合项数,请重新输入"<<endl;Sleep(1000);system("cls");cout<<"请输入所给拟合数据点的个数n=";cin>>n;cout<<"请输入所要拟合多项式的项数m=";cin>>m;}x=new double[n];                             //存放数据点xy=new double[n];                             //存放数据点ya=new double[m];                             //存放拟合多项式的系数cout<<"请输入所给定的"<<n<<"个数据x"<<endl;for(i=0;i<n;i++){cout<<"x["<<i+1<<"]=";cin>>x[i];}cout<<"请输入所给定的"<<n<<"个数据y"<<endl;for(i=0;i<n;i++){cout<<"y["<<i+1<<"]=";cin>>y[i];}zuixiaoerchengnihe(x,y,n,a,m+1);cout<<endl;cout<<"拟合多项式的系数为:"<<endl;for(i=0;i<=m;i++)cout<<"a["<<i<<"]="<<a[i]<<'\t';cout<<endl;cout<<"平方误差为:"<<pingfangwucha(x,y,n,a,m+1)<<endl;delete x;   delete y;cout<<"按y继续,按其他字符退出"<<endl;cin>>ch;}while(ch=='y'||ch=='Y');

高斯曲线拟合原理及实现相关推荐

  1. 高斯拟合原理_看得见的高斯过程:这是一份直观的入门解读

    高斯过程可以让我们结合先验知识,对数据做出预测,最直观的应用领域是回归问题.本文作者用几个互动图生动地讲解了高斯过程的相关知识,可以让读者直观地了解高斯过程的工作原理以及如何使其适配不同类型的数据. ...

  2. 高斯拟合原理_解读 | 得见的高斯过程

    机器之心编译 高斯过程可以让我们结合先验知识,对数据做出预测,最直观的应用领域是回归问题.本文作者用几个互动图生动地讲解了高斯过程的相关知识,可以让读者直观地了解高斯过程的工作原理以及如何使其适配不同 ...

  3. 最小二乘法多项式曲线拟合原理与实现--转

    原文地址:http://blog.csdn.net/jairuschan/article/details/7517773/ 概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过 ...

  4. 高斯拟合原理_AlexNet原理和实现

    本文是读深度学习的开山之作<ImageNet Classification with Deep Convolutional Neural Networks>所作的笔记. 论文笔记 1.解决 ...

  5. OPENCV混合高斯模型原理

    (本文转自转自:http://blog.sina.com.cn/s/blog_62bce98c0100shkq.html) 混合高斯模型跟高斯变量之和看起来有一点像, 注意不要把它们弄混淆了. 混合高 ...

  6. 最小二乘法多项式曲线拟合原理与实现

    概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原理部分由个人根据互联网上的资料进行总结,希望对大家能有用] ...

  7. 高斯模糊(高斯滤波)原理以及计算过程

    高斯模糊/高斯滤波 通常,图像处理软件会提供模糊滤镜,使图片产生模糊效果. 模糊的算法有很多,其中有一种叫高斯模糊(Gaussian Blur),它将正态分布用于图像处理. 文本介绍了高斯模糊的算法, ...

  8. 最小二乘法多项式曲线拟合原理与实现(错误地方已经修改底层补充自己写的java实现)

    目录(?) [-] 概念 原理 运行前提 代码 运行效果 概念 最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(x)的近似曲线y= φ(x). 原理 [原 ...

  9. python高斯滤波和降噪_高斯滤波原理及python实现

    高斯滤波器时一种线性平滑滤波器,主要适用处理高斯噪声,所以在了解高斯滤波之前,我们首先熟悉一下高斯噪声.噪声在图像中表现的通常是引起视觉效果的孤立像素点和像素块,简单说噪声点就是会给图像带来干扰,让图 ...

最新文章

  1. 计算机网络课程设计课件,中国石油大学计算机网络课程设计
  2. 【Java数据库】ORM思想:对象关系映射 使用Java容器存储多条记录
  3. 第五十四天 how can I 坚持
  4. (转)基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍
  5. LVS+ldirector实现负载均衡
  6. 日报管理系统_好车日报:通用电动车无线电池管理系统;8月皮卡增长39.8%
  7. mysql 存储过程 光标_mysql存储过程 光标
  8. 网页端下载喜马拉雅音频
  9. 微信转发软件后缀_简单修改后缀让微信发送25M以上微信大视频
  10. vivox9系统基于Android,vivo X9
  11. 三星研究院上机测试邮件范例2-optimal Path
  12. 不懂带人,你就自己干到死
  13. android 点9图使用教程,Android Studio中点9图片的详细使用教程
  14. Java基础(dayThirteen):并发与多线程
  15. 欢迎来到天蓝零度的官方微博发布平台
  16. TryHackMe-Minotaur‘s_Labyrinth
  17. 2010年财富杂志全球500强榜公布 沃尔玛居榜首
  18. Java新AIO/NIO2:AsynchronousFileChannel以Future方式读
  19. PMI-ACP练习题(17)
  20. Budgie Desktop v8 发布,改进菜单和面板

热门文章

  1. 疫情当下无法继续学画画?来美术集线上画室在家好好学美术~
  2. 本科生学深度学习-史上最容易懂的RNN文章
  3. 为王菲写的第十首《雄心永在》
  4. (读书笔记)理性思维看待世界
  5. 智慧公交app开发的功能主要有哪些
  6. JSP宿舍寝室管理系统
  7. 乐山计算机职业学院寝室,【2021】乐山职业技术学院寝室宿舍条件与学校食堂环境图片_优优招生网...
  8. Oracle ASM Active Change Directory
  9. 微软常用运行库合集 2023最新版(内置链接长期更新)
  10. 【Matlab】已知邻接矩阵怎么求每个节点的度脑网络计算