当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

Matlab 曲线拟合

发表于: 2015-05-14   作者:cofftech   来源:转载   浏览次数:
摘要: 在matlab中经常需要对数据进行曲线拟合,如最常见的多项式拟合,一般可以通过cftool调用曲线拟合工具(curve fit tool),通过图形界面可以很方便的进行曲线拟合,但是有些时候也会遇到不方便用图形工具。因此这里简单的记下两种常用的拟合方法。 1 多项式拟合(polyfit和polyval) polyfit可以对数据进行拟合(自定义用几次多项式),返回相应的参数,然后用polyva
在matlab中经常需要对数据进行曲线拟合,如最常见的多项式拟合,一般可以通过cftool调用曲线拟合工具(curve fit tool),通过图形界面可以很方便的进行曲线拟合,但是有些时候也会遇到不方便用图形工具。因此这里简单的记下两种常用的拟合方法。
1 多项式拟合(polyfit和polyval)
polyfit可以对数据进行拟合(自定义用几次多项式),返回相应的参数,然后用polyval生成拟合后的数据点,下面的例子中我们对抛物线y=3x2+6x+5进行拟合。
x = -5:0.1:5;
y = 3*x.^2+6*x + 5 + randn(size(x));
p = polyfit(x,y,2);
yy = polyval(p,x);
plot(x,y,'.');
hold on;
plot(x,yy,'r','LineWidth',2)
polyfit(x,y,2)中x表示自变量,y表示因变量,2表示用二次曲线(抛物线)进行拟合,得到的p其实是对应的参数估计值,yy为拟合数据点。另外在实验中还加了一个随机噪声。

2 高斯函数的曲线拟合
高斯曲线也是很常要拟合的曲线,这里介绍一种直接用代码使用cftool拟合工具的方法,这种方法可以对许多自定义的函数进行拟合(例如用来做多项式拟合,但是这种方法要麻烦很多,远没有前一种方法多项式拟合方便)。下面的是一个简单的例子,其中还可以进行更复杂的设置,具体请help fit和fittype.


f = fittype('a*exp(-((x-b)/c)^2)');
x = -10:0.2:10;
y = 5*exp(-((x)/4).^2)+randn(size(x))*0.1;
plot(x,y,'.')
[cfun,gof] = fit(x(:),y(:),f);
yy = cfun.a*exp(-((x-cfun.b)/cfun.c).^2);
hold on;plot(x,yy,'r','LineWidth',2);


此外,高斯曲线的拟合也可以通过转化为多项式拟合的方法实现,先将被拟合数据y取对数,然后用多项式拟合求出对应的参数。代码如下:

x = -10:0.2:10;
y = 5*exp(-((x)/4).^2);
lny = log(y);
p = polyfit(x,lny,2);
gauss.c = sqrt(-1/p(1));
gauss.b = -p(2)/2/p(1);
gauss.a = exp(p(3)-p(1)*gauss.b^2);
yy = gauss.a*exp(-((x-gauss.b)/gauss.c).^2);
plot(x,y,'.');
hold on;
plot(x,yy,'r','LineWidth',2)


但是这种方法似乎只在没有噪声干扰时效果较好,如果存在噪声的干扰的话,那么这个估计不是最佳的(因为对数运算使不同区间的噪声影响不同),右图为加了噪声之后的情况.
                 

更多曲线拟合 Matlab源码: http://www.eyesourcecode.com/forum-Matlab-1.html

Matlab 曲线拟合

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;
概念 最小二乘法多项式曲线拟合,依据给定的m个点,并不要求这条曲线精确地经过这些点。而是曲线y=f(
概念 最小二乘法多项式曲线拟合,依据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(
MATLAB是矩阵实验室(Matrix Laboratory)的简称。 What's new? 数组运算: 1、函数real、imag、abs
for n = 8:11 subplot(2,2,n-7) surf(magic(n)) title(num2str(n)) axis off view(30,45) axis tigh
程序文件 study2.m function study2() count=7; n=1; %X=[1 2 3 4 5 4.2 6 7 8]'; %Y=[5,4,5,4.5,5,
概念 最小二乘法多项式曲线拟合,依据给定的m个点,并不要求这条曲线精确地经过这些点,而是曲线y=f(
(一)二维数据曲线图 一、绘制单根二维曲线 1、基本调用格式 plot(x,y) (1)x,y为长度相同的向量
(一)图形对象及其句柄 一、图形对象 MATLAB图形对象包括: 1、MATLAB每一个具体图形一定包括计算
最近做一个项目,需要很多进行很多信号处理——小魏就是学软件的,对信号处理简直是个小白,最简单
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号