Matlab 曲线拟合

在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

时间: 2024-10-26 05:23:38

Matlab 曲线拟合的相关文章

[matlab]曲线拟合(整理)

一.曲线拟合是要找到一条光滑曲线,使其最佳地拟合数据,该曲线不必经过数据点: 二.曲线拟合的内容: 1.光滑曲线的形式是怎么样:多项式模型?指数模型?其他函数模型 2.最佳拟合的概念: 常用的误差准则是误差平方和最小,也可以是最大误差最小准则,误差绝对值和等. 三.Matlab多项式拟合函数(指数拟合可以转换为多项式拟合来做,略): ployfit(x,y,n);   %返回值为多项式的各个系数 x  自变量 y  应变量 n  多项式阶数 polyval(P,xi);   %返回值为多项式在x

Matlab 曲线拟合之polyfit与polyval函数

p=polyfit(x,y,n) [p,s]= polyfit(x,y,n) 说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p.x必须是单调的.矩阵s用于生成预测值的误差估计. 多项式曲线求值函数:polyval( ) 调用格式: y=polyval(p,x) [y,DELTA]=polyval(p,x,s) 说明:y=polyval(p,x)为返回对应自变量x在给定系数P的多项式的值. [y,DELTA]=polyval(p,x,s) 使用polyfit函数的选项输

基于MATLAB的多项式数据拟合方法研究-毕业论文

摘要:本论文先介绍了多项式数据拟合的相关背景,以及对整个课题做了一个完整的认识.接下来对拟合模型,多项式数学原理进行了详细的讲解,通过对文献的阅读以及自己的知识积累对原理有了一个系统的认识.介绍多项式曲线拟合的基本理论,对多项式数据拟合原理进行了全方面的理论阐述,同时也阐述了曲线拟合的基本原理及多项式曲线拟合模型的建立.具体记录了多项式曲线拟合的具体步骤,在建立理论的基础上具体实现多项式曲线的MATLAB实现方法的研究,采用MATLAB R2016a的平台对测量的数据进行多项式数据拟合,介绍了M

利用MATLAB进行曲线拟合

软件环境:MATLAB2013a 一.多项式拟合 多项式拟合是利用多项式最佳地拟合观测数据,使得在观测数据点处的误差平方和最小. 在MATLAB中,利用函数ployfit和ployval进行多项式拟合. 函数ployfit根据观测数据及用户指定的多项式阶数得到光滑曲线的多项式表示,polyfit的一般调用格式为:P = polyfit(x,y,n).其中x为自变量,y为因变量,n为多项式阶数. polyval的输入可以是标量或矩阵,调用格式为 pv = polyval(p,a) pv = pol

MATLAB实例:非线性曲线拟合

MATLAB实例:非线性曲线拟合 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用最小二乘法拟合非线性曲线,给出两种方法:(1)指定非线性函数,(2)用傅里叶函数拟合曲线 1. MATLAB程序 clear clc xdata=[0.1732;0.1775;0.1819;0.1862;0.1905;0.1949;0.1992;0.2035;0.2079;0.2122;0.2165;0.2208;0.2252;0.2295;0.2338;0.238

Matlab中用fit做曲线拟合

1.确定要拟合的类型 一般情况下matlab会直接提供常用的类型,用fittype创建拟合模型.至于matlab具体提供了哪些模型,参见帮助"List of library models for curve and surface fitting" ft = fittype( 'gauss1' ); %高斯拟合 2.要拟合的数据格式 在最简单的情况下,即拟合两个向量X,Y,则其必须是列向量 3.拟合 使用fit进行拟合 fitresult= fit( xData, yData, ft,

Matlab实例学习------多项式和非多项式曲线拟合(实例)

具体实例:(多项式和非多项式,附带程序注释) % 曲线拟合 %% 多项式曲线拟合 x=-pi:0.1:pi; y=sin(x); plot(x,y);%原始曲线 p0=polyfit(x,y,4);%绘制4阶拟合曲线 返回多项式的系数向量 y1=polyval(p0,x);%多项式求值 % The polynomial is evaluated at x =5, 7, and 9 with % p = [3 2 1]; % polyval(p,[5 7 9]) % % which results

matlab学习笔记第十章——曲线拟合

1.调用polyfit让MATLAB计算拟合数据的多项式的系数. y = mx + b,要求得m和b的值,我们可以使用一个称为polyfit(x, y, n)的MATLAB函数,其中n是我们要MATLAB求出的多项式的次数,对于y = mx + b形式的方程,我们把n设为等于1,因此调用的语句将是polyfit(x, y, 1). 2.可以使用find命令提问与数据有关的问题. 3.指数函数的拟合   w = log10y   z = x 然后用下面的形式进行数据拟合:w = p1z + p2.

polyfit 多项式曲线拟合matlab

polyfit 多项式曲线拟合 全页折叠 语法 p = polyfit(x,y,n) [p,S] = polyfit(x,y,n) [p,S,mu] = polyfit(x,y,n) 说明 示例 p = polyfit(x,y,n) 返回阶数为 n 的多项式 p(x) 的系数,该阶数是 y 中数据的最佳拟合(在最小二乘方式中).p 中的系数按降幂排列,p 的长度为 n+1 p(x)=p1xn+p2xn−1+...+pnx+pn+1. [p,S] = polyfit(x,y,n) 还返回一个结构体