当前位置:首页 > 生活百科

matlab曲线拟合函数有哪些(常用的曲线拟合函数)

栏目:生活百科日期:2025-03-11浏览:0

数据导入MATLAB之后,通常需要对数据进行一些预处理,例如平滑处理(去噪)、标准化变换和极差归一化变换等。

1.数据的平滑处理

1.1 smooth函数平滑处理

MATLAB曲线拟合工具箱中提供了smooth函数,用来对数据进行平滑处理,调用格式如下:

(1)yy=smooth(y)

利用移动平均滤波器对列向量y进行平滑处理,返回与y等长的列向量yy。移动平均滤波器的默认窗宽为5,yy中元素的计算方法如下:

yy(1)=y(1)

yy(2)=(y(1)+y(2)+y(3))/3

yy(3)=(y(1)+y(2)+y(3)+y(4)+y(5))/5

yy(4)=(y(2)+y(3)+y(4)+y(5)+y(6))/5

&…&…

(2) yy=smooth(y,span)

用span参数指定移动平均滤波器的窗宽,函数内部会强制将span变为奇数。

(3)yy=smooth(y,method)

method参数指定平滑数据的方法,method是字符串变量,可用的字符串如下表:

method参数值 说明

moving 移动平均法(默认情况)

lowess 局部回归(加权线性最小二乘和一个一阶多项式模型)

loess 局部回归(加权线性最小二乘和一个二阶多项式模型)

sgolay Sacitzky-Golay滤波,一种广义移动平均滤波法

rlowess lowess方法的稳健形式

rloess loess方法的稳健形式

(4)yy=smooth(y,span,method)

method指定平滑方法,span指定窗宽。

例:产生一正弦信号,加入噪声信号,调用smooth函数对加入噪声的正弦波进行平滑处理

t=linspace(0,2*pi,500);%产生一个从0到2*pi的向量,长度为500,(t=0:2*pi/500:2*pi)

y=100*sin(t); %产生正弦波信号

noise=normrnd(0,15,1,500); %产生1行500列的服从N(0,15^2)分布的随机数,作为噪声信号

y=y+noise; %将正弦信号加入噪声信号

figure; %新建一个窗口

plot(t,y); %绘制加噪声波形

xlabel(&‘t&’);

ylabel(&‘y=sin(t)+噪声&’);

title(&‘原始信号&’);

%&—&–移动平均法&—&–

yy1=smooth(y,30); %利用移动平均法对y进行平滑处理

figure;

plot(t,y,&’k:&’); %画出原始信号,类型为黑色点线化出

hold on;

plot(t,yy1,&’k&’,&’linewidth&’,3); %绘制平滑后波形图,颜色为黑色,宽度为3

xlabel(&‘t&’);

ylabel(&‘moving&’);

legend(&‘原始信号&’,&’平滑后波形&’);

title(&‘移动平均法平滑处理&’);

%&—-lowess法&—&–

yy2=smooth(y,30,&’lowess&’); %利用lowess方法对y进行平滑处理

figure; %新建一个图形窗口

plot(t,y,&’k:&’); %绘制原始信号

hold on;

plot(t,yy2,&’k&’,&’linewidth&’,3); %绘制平滑后波形图

xlabel(&‘t&’);

ylabel(&‘rlowrss&’);

legend(&‘原始信号&’,&’平滑后波形&’);

title(&‘lowess方法平滑处理&’);

%&—&–rlowess方法平滑处理

yy3=smooth(y,30,&’rlowess&’); %利用rlowess方法对y进行平滑处理

figure; %新建一个图形窗口

plot(t,y,&’k:&’); %绘制原始信号

hold on;

plot(t,yy3,&’k&’,&’linewidth&’,3);

xlabel(&‘t&’);

ylabel(&‘rlowess&’);

legend(&‘原始信号&’,&’平滑后波形&’);

title(&‘rlowess方法平滑处理&’);

%&—-loess方法平滑处理

yy4=smooth(y,30,&’loess&’); %用loess方法对y进行平滑处理

figure;

plot(t,y,&’k:&’); %原始信号

hold on;

plot(t,yy4,&’k&’,&’linewidth&’,3); %绘制平滑后波形图

xlabel(&‘t&’);

ylabel(&‘loess&’);

legend(&‘原始信号&’,&’平滑后波形&’);

title(&‘loess方法平滑处理&’);

%&—sgolay方法平滑处理

yy5=smooth(y,30,&’sgolay&’,3); %利用sgolay方法对y进行平滑处理

figure;

plot(t,y,&’k:&’);

hold on;

plot(t,yy5,&’k&’,&’linewidth&’,3); %绘制平滑后的波形图

xlabel(&‘t&’);

ylabel(&‘sgolay&’);

legend(&‘原始信号&’,&’平滑后波形&’);

title(&‘sgolay方法平滑处理&’);

调用smooth函数,设置相同的窗宽,用5中方法对加噪声后信号进行平滑处理,可以发现,这5种方法平滑效果,都比较好的滤除了噪声,反映了数据的总体规律。实际上随着窗宽的增大,平滑后的曲线也会越来越平滑,但过于光滑也可能造成失真。

1.2 smoothts函数平滑处理

MATLAB金融工具箱中提供了smoothts函数,也可用来对数据进行平滑处理,调用格式如下:

output=smoothts(input)

output=smoothts(input,‘b’,wsize)

output=smoothts(input,‘g’,wsize,stdev)

output=smoothts(input,‘e’,n)

输入参数input是输入数据,‘b’,‘g’,‘e’表示不同的数据平滑方法,‘b’表示盒子法(默认情况),&’g&’表示高斯窗方法,‘e’表示指数法。wsize指定各种数据平滑方法的窗宽,默认窗宽为5。stdev用来指定高斯方法的标准差,默认为0.65.

例:现有上海股市开盘价、最高价,最低价,收盘价,收益率等数据,共有510组数据,试调用smoothts函数对日收盘价数据进行平滑处理

数据如图所示:

x=xlsread(&‘C:UsersAdministratorDesktopMATLABMATLAB数据分析与统计chapter21.xls&’);%读取数据

price=x(:,4)&’; %提取矩阵x中的第4列数据,即收盘价数据, 并转置,装换为行向量

plot(price,&’k&’,&’LineWidth&’,2); %绘制收盘价的曲线,绘制类型:黑色实线,线宽为2

xlabel(&‘观测序号&’);

ylabel(&‘日收盘价&’);

title(&‘原始数据&’);

%&—盒子法平滑数据

output1=smoothts(price,&’b&’,30); %用盒子法平滑数据,窗宽为30

output2=smoothts(price,&’b&’,100); %盒子法平滑数据,窗宽为100

figure; %新建一个图形窗口

plot(price,&’.&’); %绘制原始数据

hold on;

plot(output1,&’k&’,&’LineWidth&’,2); %绘制平滑后的曲线,曲线类型:黑色实线,宽度2

plot(output2,&’k-.&’,&’LineWidth&’,2); %绘制平滑后的曲线,曲线类型:黑色点画线,线宽为2

xlabel(&‘观测信号&’);

ylabel(&‘Box method&’);

legend(&‘原始散点数据&’,&’平滑后曲线(窗宽30)&’,&’平滑后数据(窗宽100)&’);

title(&‘盒子法平滑数据&’);

%&—&–高斯窗方法平滑数据

output3=smoothts(price,&’g&’,30); %窗宽为30,标准差为默认值0.65

output4=smoothts(price,&’g&’,100,100); %窗宽为100,标准差为100

figure; %新建一个图形窗口

plot(price,&’.&’); %绘制元素数据

hold on;

plot(output3,&’k&’,&’LineWidth&’,2); %绘制平滑后的曲线,类型:黑色实线,线宽为2

plot(output4,&’k-.&’,&’LineWidth&’,2); %绘制平滑后的曲线,类型:黑色点画线,线宽为2

xlabel(&‘观测信号&’);

ylabel(&‘Gaussian method&’);

legend(&‘原始散点&’,&’平滑曲线(窗宽30,标准差0.65)&’,&’平滑曲线(窗宽100,标准差100)&’);

title(&‘高斯窗方法平滑&’);

%&—-指数法平滑数据

output5=smoothts(price,&’e&’,30); %用指数法平滑数据,窗宽为30

output6=smoothts(price,&’e&’,100); %用指数法平滑数据,窗宽为100

figure; %新建一个图形窗口

plot(price,&’.&’); %绘制元素数据散点图

hold on;

plot(output5,&’k&’,&’LineWidth&’,2); %绘制平滑后曲线图,曲线类型:黑色实线,线宽2

plot(output6,&’k-.&’,&’LineWidth&’,2); %绘制平滑后曲线图,线型:黑色点画线,线宽2

xlabel(&‘观测序号&’);

ylabel(&‘Exponential method&’);

legend(&‘原始散点数据&’,&’平滑曲线(线宽30)&’,&’平滑曲线(线宽100)&’);

title(&‘指数法平滑数据&’)

例中,调用smoothts函数,用3种不同的方法(盒子法,高斯窗法,指数法),每种方法设定两种不同的窗宽,对收盘价数据进行了平滑处理,并做出平滑曲线,原始收盘价曲线比较曲折,不够光滑,从图中可以看出,前两种方法在端点处的平滑效果不是很好,最后一种方法在右尾部的处理有些失真。但在数据的中段,这三种方法的平滑效果比较好,并且随着窗宽的增大,平滑后的曲线的光滑性也在增强,但光滑度增强的同时也造成了失真。

1.3 medfilt1函数平滑处理

MATLAB信号处理工具箱中提供了medfilt1函数,用来对信号数据进行一维中值滤波,其调用格式如下:

(1)y=medfilt1(x,n);

对向量x进行一维中值滤波,返回与x等长的向量y。这里的n是窗宽参数,当n是奇数时,y的第k个元素等于x的第k-(n-1)/2个元素至k+(n-1)/2个元素的中位数;当n是偶是,y的第k个元素等于x的第k-n/2个元素至第k+n/2-1个元素的中位数。n的默认值为3

(2) y=medfilt1(x,n,blksz)

默认情况下,blksz=length(x)。当x是一个矩阵时,通过循环对x的各列进行一维中值滤波,返回对x的各列进行一维中值滤波,返回与x具有相同行数和列数的矩阵y

(3)y=medfilt1(x,n,blksz,dim)

用dim参数指定沿x的哪个维进行滤波

例:产生一正弦信号,加入噪声,然后调用medfilt1函数对加入噪声的正弦波进行平滑处理(滤波)

t=linspace(0,2*pi,500); %产生一个从0到2*pi的向量,长度为500

y=100*sin(t);

noise=normrnd(0,15,1,500); %产生1行500列的服从N(0,15^2)分布的随机数,作为噪声信号

y=y+noise; %将正弦波信号加入噪声信号

figure; %新建一个图形窗口

plot(t,y); %绘制加入噪声后的波形图

xlabel(&‘t&’);

ylabel(&‘y=sin(t)+noise&’);

title(&‘原始信号&’);

%调用medfilt1对加噪声正弦信号y进行中值滤波,并绘制波形图

yy=medfilt1(y,30); %指定窗口为30,对y进行中值滤波

figure; %新建一个图形窗口

plot(t,y,&’k:&’); %绘制加噪声波形图

hold on;

plot(t,yy,&’k&’,&’LineWidth&’,3); %绘制平滑后曲线图,线型:黑色实线,线宽为3

xlabel(&‘t&’);

ylabel(&‘中值滤波&’);

legend(&‘加噪波形&’,&’平滑后波形&’);

title(&‘medfilt1平滑&’);

“matlab曲线拟合函数有哪些(常用的曲线拟合函数)” 的相关文章

div上下布局方法(利用div和css布局的优势)

内容导读当父p的行高等于自身高度时,内部的行内元素会上下居中显示。行内块没有固定高度时也会上下居中显示。所以需要对父p的line-height进行调整。利用定位...

excel怎么画表格线条(绘制表格操作方法)

各位小伙伴们大家好!我是归一!今天我将带着大家了解一下Excel日期函数,并用它们来生成一张自定义的日期表,大家一起来学习吧~#制作表格#首先,我们先来了解一些...

一个网站如何做好aso优化(10点做好aso优化)

ASO的目的很简单,提高APP在APPStrore(应用商店)的曝光率,为应用带来下载量,从而起到一个宣传、推广该APP的目的。说白了,跟SEO推广网站一样,A...

喜茶为什么那么火,90%的人不知道的套路

昨天,喜茶继联名杜蕾斯被群嘲后又一次“喜提热搜”,针对济南一家喜茶店员工殴打外卖小哥一事,喜茶方面做出回应:“涉事员工已全作辞退处理”。监控上显示,顾客在12:...

公司网站建设方案(网页制作策划书和流程)

IT行业是我国经济发展中速度最快的行业之一,是一个典型的朝阳产业,发展前景广阔。因为它涉及到全国各行各业,关系到人们生活的方方面面。无论是企业还是政府,社会对I...

excel判断函数的使用(if多重判断条件格式)

对于IF函数,相信很多人都不陌生,它是一个条件判断函数,几乎可以解决我们工作中遇到的,所有的条件判断之类的问题,我觉得它的重要程度不亚于vlookup函数,使用...

python中str函数的用法(str函数的详细用法)

简介字符串是Python最常用的数据类型。我们可以使用引号(&‘或&“,甚至&“&”&”或&R...

dvr是什么设备(车上DVR使用方法)

NVR是接IPcamera的录像机,IPcamera又分为CIF/D1普通的IPC与数字百万高清IPC;DVR的录像效果取决于摄像机与DVR本身的压缩算法与芯片...

人际网络营销合法吗,怎么避免入传销陷阱

网络配图1、不允许喝酒。喝酒误事,一个真实的小故事。以前一个老朋友,出去喝酒打车回寝,下车时一看兜里没带钱,于是仗着喝了酒准备赖账。但是司机偷偷地跟着他摸到了寝...

mac开发java的好处(mac搭建java开发环境的相关知识)

对于软件开发人员,代码编辑器好用与否直接影响代码编辑的效率。软件开发,基本上都有集成开发环境(IDE)工具,且自带编辑器,但IDE自带编辑器多少都存在一些不足。...