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

数据导入MATLAB后,通常需要进行一些预处理,如平滑(去噪)、标准化变换、范围归一化变换等。1.数据的平滑处理1.1平滑函数平滑MATLAB的曲线拟合工具箱中提供了平滑函数,用于平滑

本文最后更新时间:  2023-02-26 05:36:43

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

1.数据的平滑处理

1.1平滑函数平滑

MATLAB的曲线拟合工具箱中提供了平滑函数,用于平滑数据。调用格式如下:

(1)YY =平滑(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 =平滑(y,跨度)

使用span参数指定移动平均滤波器的窗口宽度,该函数将强制span为奇数。

(3)yy=smooth(y,方法)

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

方法参数值描述

移动平均法(默认)

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

黄土局部回归(加权线性最小二乘法和二阶多项式模型)

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

鲁棒形式的lowess lowess方法

rloess黄土法的稳健形式

(4)yy=smooth(y,跨度,方法)

方法指定平滑方法,跨度指定窗口宽度。

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

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

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

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

y = y+噪声;%将正弦信号添加到噪声信号中。

图;%创建一个新窗口。

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

xlabel(‘t & # 8217);

y label(‘Y=sin(t)+噪声’);

标题(‘原始信号’);

%—–移动平均法—–

yy1=smooth(y,30);%使用移动平均法平滑y。

图;

plot(t,y,’k:’);%绘制原始信号,类型为黑色虚线。

坚持住;

plot(t,yy1,’k & # 8217,’线宽’,3);%用黑色和宽度3绘制平滑的波形图。

xlabel(‘t & # 8217);

y label(‘动人’);

图例(‘原始信号’,’平滑波形’);

标题(‘移动平均平滑’);

%—-洛斯法—–

yy2=smooth(y,30,’洛斯’);%用lowess方法平滑Y。

图;%创建一个新的图形窗口。

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

坚持住;

plot(t,yy2,’k & # 8217,’线宽’,3);%画出平滑的波形图。

xlabel(‘t & # 8217);

y label(‘rlowrss & # 8217);

图例(‘原始信号’,’平滑波形’);

标题(‘洛斯平滑法’);

%—–洛斯平滑法

yy3=smooth(y,30,’洛沃斯’);通过rlowess方法% smooth y。

图;%创建一个新的图形窗口。

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

坚持住;

plot(t,yy3,’k & # 8217,’线宽’,3);

xlabel(‘t & # 8217);

y label(‘洛沃斯’);

图例(‘原始信号’,’平滑波形’);

标题(‘无线平滑方法’);

%—-黄土平滑法

yy4=smooth(y,30,’黄土’);%用黄土法平滑y轴

图;

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

坚持住;

plot(t,yy4,’k & # 8217,’线宽’,3);%画出平滑的波形图。

xlabel(‘t & # 8217);

y label(‘黄土’);

图例(‘原始信号’,’平滑波形’);

标题(‘黄土抹平法’);

%—斯戈雷平滑法

yy5=smooth(y,30,’斯戈莱’,3);通过sgolay方法平滑y百分比

图;

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

坚持住;

plot(t,yy5,’k & # 8217,’线宽’,3);%画出平滑的波形图。

xlabel(‘t & # 8217);

y label(‘斯戈莱’);

图例(‘原始信号’,’平滑波形’);

标题(‘用斯戈莱方法平滑’);

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

1.2 smoothts函数的平滑

MATLAB的金融工具箱中提供了smoothts函数,也可以用来平滑数据。呼叫格式如下:

输出=平滑(输入)

output=smoothts(input,' b ',wsize)

output=smoothts(input,' g ',wsize,stdev)

输出=smoothts(输入,' e ',n)

输入参数input是输入数据,' B ',' G ',' E '表示不同的数据平滑方法,' B '表示box方法(默认)。’g & # 8217高斯窗口法和指数法。Wsize指定了各种数据平滑方法的窗口宽度,默认的窗口宽度是5。Stdev用于指定高斯方法的标准差,默认为0.65。

比如沪市的开盘价、最高价、最低价、收盘价、收益率等510组数据。尝试调用smoothts函数平滑每日收盘价数据。

如图所示:

x = xls read(‘c:用户数据分析与统计管理员桌面MATLAB chapter21.xls & # 8217);%读取数据

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

情节(价格,’k & # 8217,’线宽’,2);%绘制收盘价曲线,绘图类型:黑色实线,线宽为2。

xlabel(‘观察序列号’);

y label(‘每日收盘价’);

标题(‘原始数据’);

%—盒子平滑数据

output1=smoothts(price,’b & # 8217,30);%通过框方法平滑数据,窗口宽度为30。

output2=smoothts(price,’b & # 8217,100);% box方法平滑数据,窗口宽度为100。

图;%创建一个新的图形窗口。

情节(价格,’。’);%绘制原始数据

坚持住;

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

plot(output2,’凯。’,’线宽’,2);%画一条平滑的曲线,曲线类型:黑色虚线,线宽2。

xlabel(‘观察信号’);

y label(‘盒子法’);

图例(‘原始散点数据’,’平滑背部曲线(窗宽30)’,’平滑数据(窗口宽度100)’);

标题(‘方框平滑数据’);

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

output3=smoothts(价格,’g & # 8217,30);%窗口宽度是30,标准偏差是默认值0.65。

output4=smoothts(price,’g & # 8217,100,100);%窗口宽度为100,标准偏差为100。

图;%创建一个新的图形窗口。

情节(价格,’。’);%绘图元素数据

坚持住;

plot(输出3,’k & # 8217,’线宽’,2);%绘制平滑曲线,类型:黑色实线,线宽2。

plot(output4,’凯。’,’线宽’,2);%绘制平滑曲线,类型:黑色虚线,线宽2。

xlabel(‘观察信号’);

y label(‘高斯方法’);

图例(‘原创零散点’,’平滑曲线(窗宽30,标准差0.65)’,’平滑曲线(窗宽100,标准差100)’);

标题(‘高斯平滑法’);

%—-指数平滑数据

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

output6=smoothts(价格,’e & # 8217,100);%用指数法平滑数据,窗宽100。

图;%创建一个新的图形窗口。

情节(价格,’。’);%绘制元素数据的散点图

坚持住;

plot(输出5,’k & # 8217,’线宽’,2);%绘制平滑曲线,曲线类型:黑色实线,线宽2。

plot(输出6,’凯。’,’线宽’,2);%绘制平滑曲线,线型:黑色虚线,线宽2

xlabel(‘观察序列号’);

y label(‘指数法’);

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

标题(‘指数平滑数据’)

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

1.3 medfilter 1函数的平滑处理

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 =长度(x)。当X为矩阵时,通过循环对X的每一列进行一维中值滤波,对X的每一列返回一维中值滤波,返回与X相同行数和列数的矩阵Y。

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

使用尺寸参数指定要过滤x轴上的哪个尺寸。

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

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

y = 100 * sin(t);

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

y = y+噪声;%将正弦波信号添加到噪声信号中。

图;%创建一个新的图形窗口。

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

xlabel(‘t & # 8217);

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

标题(‘原始信号’);

%调用medfilt1对含噪正弦信号Y进行中值滤波,并绘制波形图。

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

图;%创建一个新的图形窗口。

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

坚持住;

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

xlabel(‘t & # 8217);

y label(‘中值滤波’);

图例(‘添加噪声波形’,’平滑波形’);

标题(‘Medfilt1平滑’);

温馨提示:内容均由网友自行发布提供,仅用于学习交流,如有版权问题,请联系我们。