社区
其它技术问题
帖子详情
求高斯函数拟合的算法
qujc
2004-11-15 09:41:27
我的程序中需要对采集到的数据进行高斯拟合,但找不到相关的资料
...全文
868
9
打赏
收藏
求高斯函数拟合的算法
我的程序中需要对采集到的数据进行高斯拟合,但找不到相关的资料
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ayingshmily
2004-12-03
打赏
举报
回复
一定用高斯吗?我这里倒是有拉格朗日和牛顿的算法。
牛顿的算法:给出一些离散的点(知道这些点的坐标),求出拟合的函数。我这里用sin(x)做的例子,画出了拟合函数的图像和准确函数的图像来做比较,比较直观。
学数值分析的时候代码写的不够规范,撮合着读吧。
#include "stdio.h"
#include "graphics.h"
#include"math.h"
#define maxsize 50
#define e 13
float newton(int x[],float y[],int n,int k)
{ float a[maxsize][maxsize];
float N=0,l=1;
int i,j;
for(j=0;j<n+1;j++)
a[0][j]=y[j];
for(i=1;i<n;i++)
for(j=i;j<n;j++)
a[i][j]=(a[i-1][j-1]-a[i-1][j])/(x[j-i]-x[j]);
for(i=0;i<n;i++)
{N=N+l*a[i][i];
l=l*(k-x[i]);
}
return(N);
}
main()
{ int a[maxsize];float b[maxsize];
int gdriver=DETECT, gmode;
float i;
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver, &gmode, "");
/* setbkcolor(8);*/
setcolor(LIGHTRED);
line(50,220,560,220);
line(100,50,100,400);
outtextxy(90,222,"o");
outtextxy(557,217,">");
outtextxy(97,50,"^");
outtextxy(560,224,"x");
outtextxy(107,50,"y");
setcolor(LIGHTGREEN);
outtextxy(170,30,"y=sin(x)");
i=100;
while(i!=540)
{ putpixel(i,(sin((i-100)/20))*120+220,LIGHTGREEN);
i=i+0.5;
line(i-1,(sin((i-1-100)/20))*120+220,i,(sin((i-100)/20))*120+220);
}
setcolor(YELLOW);
outtextxy(170,50,"Nn=y");
a[0]=100;b[0]=sin((a[0]-100)/20)*120+220;
for(i=0;i<e;i++)
{a[i+1]=a[i]+40;
b[i+1]=sin((a[i+1]-100)/20)*120+220;
}
i=100;
while(i!=540)
{putpixel(i,newton(a,b,e,i),YELLOW);
i=i+0.5;
line(i-1,newton(a,b,e,i-1),i,newton(a,b,e,i));
}
setcolor(LIGHTRED);
outtextxy(129,217,"|");outtextxy(154,225,"PI");
outtextxy(158,217,"|");
outtextxy(190,217,"|");
outtextxy(222,217,"|");outtextxy(220,225,"2PI");
outtextxy(250,217,"|");
outtextxy(285,217,"|");outtextxy(283,225,"3PI");
outtextxy(315,217,"|");
outtextxy(348,217,"|");outtextxy(347,225,"4PI");
outtextxy(378,217,"|");
outtextxy(410,217,"|");outtextxy(406,225,"5PI");
outtextxy(440,217,"|");
outtextxy(473,217,"|");outtextxy(470,225,"6PI");
outtextxy(503,217,"|");
outtextxy(535,217,"|");outtextxy(530,225,"7PI");
outtextxy(100,156,"-");outtextxy(72,156,"0.5");
outtextxy(100,97,"-"); outtextxy(85,97,"1");
getch();
closegraph();
}
wangpingpaul
2004-12-03
打赏
举报
回复
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
langtuteng
2004-12-03
打赏
举报
回复
能不能说清楚点啊
libbyliugang
2004-12-01
打赏
举报
回复
天那,难道高斯一辈子就只发明了1+...100的简单算发吗??
aa1298
2004-11-20
打赏
举报
回复
1加到100吗
qujc
2004-11-16
打赏
举报
回复
1+到100?
什么意思?
freshairfly
2004-11-15
打赏
举报
回复
不好意思,没看清楼主的要的东西
我的是高斯主元消元法求解线性方程
呵呵,楼主看看Matlab里有没有,如果有可以拿过来用的
freshairfly
2004-11-15
打赏
举报
回复
《数值计算》里就有吧
/*利用高斯主元消元法求解法方程*/
int Gauess(double a[][MAX], double b[])
{
int i, j, k;
double s[MAX];
int p[MAX];
double fTmp;
int pi, pr, pk, pn, iTmp;
int nYuan = n + 1;
for(i = 0; i < nYuan; i++)
{
for(j = 0; j < nYuan; j++)
{
fTmp = (float)fabs(a[i][j]);
if(j == 0)
s[i] = fTmp;
else if(s[i] < fTmp)
s[i] = fTmp;
}
p[i] = i;
}
for(k = 0; k < nYuan - 1; k++)
{
/*---------------求最小的r----------------*/
int r = k;
for(i = k; i < nYuan; i++)
{
int pr = p[r];
int pi = p[i];
if(fabs(a[pr][k])/s[pr] < fabs(a[pi][k])/s[pi])
{
r = i;
}
}
/*---------------求最小的r----------------*/
/*****************如果是奇异方程,则要停止*****************/
pr = p[r];
if(a[pr][k] == 0)
{
printf("奇异方程组!\n");
return -1;
}
/*---------------方程交换---------------*/
if(k != r)
{
iTmp = p[r];
p[r] = p[k];
p[k] = iTmp;
fTmp = s[r];
s[r] = s[k];
s[k] = fTmp;
}
/*^^^^^^^^^^^^^^^^^^执行Gauss消元^^^^^^^^^^^^^^^^^^^*/
for(i = k + 1; i < nYuan; i++)
{
pi = p[i];
pk = p[k];
a[pi][k] = -a[pi][k]/a[pk][k];
for(j = k + 1; j < nYuan; j++)
{
a[pi][j] = a[pi][j] + a[pi][k]*a[pk][j];
}
b[pi] = b[pi] + a[pi][k]*b[pk];
}
}
/**********************计算结果*********************/
pn = p[nYuan-1];
c[nYuan-1] = b[pn]/a[pn][nYuan-1];
for(i = nYuan - 2; i >= 0; i--)
{
pi = p[i];
fTmp = 0.0;
for(j = i + 1; j < nYuan; j++)
{
fTmp += a[pi][j]*c[j];
}
c[i] = (b[pi] - fTmp)/a[pi][i];
}
return 0;
}
sharkhuang
2004-11-15
打赏
举报
回复
高斯?1+到100?
高斯
多峰
拟合
高斯
多峰
拟合
,需要数据基本符合
高斯
分布(正态分布)
高斯
曲线
拟合
原理以及Python源码
使用
高斯
函数
拟合
比多项式
拟合
更加合适,多项式
拟合
必须把曲线分为两段,
高斯
函数
拟合
是对所有数据进行整体
拟合
,更能够反映出数据的总体变化情况,而多项式
拟合
只能对数据进行分段
拟合
,对数据的变化趋势进行割裂。...
信号分析——
高斯
函数
拟合
(Java/Matlab)
由于上一篇博文提到的多项式
拟合
...
高斯
函数
仅适用于对称谱图,其简图如下: 假设光谱曲线,可用简单的
高斯
函数
表达: 其中,ymax、xmax和S分别为峰高、峰位和区域宽度,可通过非线性
拟合
的方法来
求
解,其过...
MATLAB实现多峰
高斯
函数
拟合
/多峰
高斯
分布
函数
拟合
(MATLAB全代码)
基于MATLAB实现多峰
高斯
函数
拟合
/多峰
高斯
分布
函数
拟合
,提供相应参数
拟合
、密度
函数
、累积分布
函数
代码。
二维
高斯
函数
拟合
到数据集:基于Matlab的实现
今天,我们将为您介绍一个开源项目——二维
高斯
函数
拟合
到数据集的Matlab实现,该项目在优化
算法
和数据
拟合
方面具有独特优势。 项目介绍 本项目是一个基于Matlab的开源程序,用于生成并
拟合
二维高...
其它技术问题
3,882
社区成员
9,045
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章