1. 河豚號 > 生活百科 >

matlab曲線擬合函數(shù)有哪些(常用的曲線擬合函數(shù))

數(shù)據(jù)導入MATLAB之后,通常需要對數(shù)據(jù)進行一些預處理,例如平滑處理(去噪)、標準化變換和極差歸一化變換等。

1.數(shù)據(jù)的平滑處理

1.1 smooth函數(shù)平滑處理

MATLAB曲線擬合工具箱中提供了smooth函數(shù),用來對數(shù)據(jù)進行平滑處理,調用格式如下:

(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參數(shù)指定移動平均濾波器的窗寬,函數(shù)內部會強制將span變?yōu)槠鏀?shù)。

(3)yy=smooth(y,method)

method參數(shù)指定平滑數(shù)據(jù)的方法,method是字符串變量,可用的字符串如下表:

method參數(shù)值 說明

moving 移動平均法(默認情況)

lowess 局部回歸(加權線性最小二乘和一個一階多項式模型)

loess 局部回歸(加權線性最小二乘和一個二階多項式模型)

sgolay Sacitzky-Golay濾波,一種廣義移動平均濾波法

rlowess lowess方法的穩(wěn)健形式

rloess loess方法的穩(wěn)健形式

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

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

例:產(chǎn)生一正弦信號,加入噪聲信號,調用smooth函數(shù)對加入噪聲的正弦波進行平滑處理

t=linspace(0,2*pi,500);%產(chǎn)生一個從0到2*pi的向量,長度為500,(t=0:2*pi/500:2*pi)

y=100*sin(t); %產(chǎn)生正弦波信號

noise=normrnd(0,15,1,500); %產(chǎn)生1行500列的服從N(0,15^2)分布的隨機數(shù),作為噪聲信號

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方法平滑處理’);

 

matlab數(shù)據(jù)的平滑處理
matlab數(shù)據(jù)的平滑處理
matlab數(shù)據(jù)的平滑處理
matlab數(shù)據(jù)的平滑處理
matlab數(shù)據(jù)的平滑處理
matlab數(shù)據(jù)的平滑處理

 

調用smooth函數(shù),設置相同的窗寬,用5中方法對加噪聲后信號進行平滑處理,可以發(fā)現(xiàn),這5種方法平滑效果,都比較好的濾除了噪聲,反映了數(shù)據(jù)的總體規(guī)律。實際上隨著窗寬的增大,平滑后的曲線也會越來越平滑,但過于光滑也可能造成失真。

1.2 smoothts函數(shù)平滑處理

MATLAB金融工具箱中提供了smoothts函數(shù),也可用來對數(shù)據(jù)進行平滑處理,調用格式如下:

output=smoothts(input)

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

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

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

輸入?yún)?shù)input是輸入數(shù)據(jù),‘b’,‘g’,‘e’表示不同的數(shù)據(jù)平滑方法,‘b’表示盒子法(默認情況),’g’表示高斯窗方法,‘e’表示指數(shù)法。wsize指定各種數(shù)據(jù)平滑方法的窗寬,默認窗寬為5。stdev用來指定高斯方法的標準差,默認為0.65.

例:現(xiàn)有上海股市開盤價、最高價,最低價,收盤價,收益率等數(shù)據(jù),共有510組數(shù)據(jù),試調用smoothts函數(shù)對日收盤價數(shù)據(jù)進行平滑處理

數(shù)據(jù)如圖所示:

 

matlab數(shù)據(jù)的平滑處理

 

x=xlsread(‘C:UsersAdministratorDesktopMATLABMATLAB數(shù)據(jù)分析與統(tǒng)計chapter21.xls’);%讀取數(shù)據(jù)

price=x(:,4)’; %提取矩陣x中的第4列數(shù)據(jù),即收盤價數(shù)據(jù), 并轉置,裝換為行向量

plot(price,’k’,’LineWidth’,2); %繪制收盤價的曲線,繪制類型:黑色實線,線寬為2

xlabel(‘觀測序號’);

ylabel(‘日收盤價’);

title(‘原始數(shù)據(jù)’);

%—盒子法平滑數(shù)據(jù)

output1=smoothts(price,’b’,30); %用盒子法平滑數(shù)據(jù),窗寬為30

output2=smoothts(price,’b’,100); %盒子法平滑數(shù)據(jù),窗寬為100

figure; %新建一個圖形窗口

plot(price,’.’); %繪制原始數(shù)據(jù)

hold on;

plot(output1,’k’,’LineWidth’,2); %繪制平滑后的曲線,曲線類型:黑色實線,寬度2

plot(output2,’k-.’,’LineWidth’,2); %繪制平滑后的曲線,曲線類型:黑色點畫線,線寬為2

xlabel(‘觀測信號’);

ylabel(‘Box method’);

legend(‘原始散點數(shù)據(jù)’,’平滑后曲線(窗寬30)’,’平滑后數(shù)據(jù)(窗寬100)’);

title(‘盒子法平滑數(shù)據(jù)’);

%—–高斯窗方法平滑數(shù)據(jù)

output3=smoothts(price,’g’,30); %窗寬為30,標準差為默認值0.65

output4=smoothts(price,’g’,100,100); %窗寬為100,標準差為100

figure; %新建一個圖形窗口

plot(price,’.’); %繪制元素數(shù)據(jù)

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(‘高斯窗方法平滑’);

%—-指數(shù)法平滑數(shù)據(jù)

output5=smoothts(price,’e’,30); %用指數(shù)法平滑數(shù)據(jù),窗寬為30

output6=smoothts(price,’e’,100); %用指數(shù)法平滑數(shù)據(jù),窗寬為100

figure; %新建一個圖形窗口

plot(price,’.’); %繪制元素數(shù)據(jù)散點圖

hold on;

plot(output5,’k’,’LineWidth’,2); %繪制平滑后曲線圖,曲線類型:黑色實線,線寬2

plot(output6,’k-.’,’LineWidth’,2); %繪制平滑后曲線圖,線型:黑色點畫線,線寬2

xlabel(‘觀測序號’);

ylabel(‘Exponential method’);

legend(‘原始散點數(shù)據(jù)’,’平滑曲線(線寬30)’,’平滑曲線(線寬100)’);

title(‘指數(shù)法平滑數(shù)據(jù)’)

 

matlab數(shù)據(jù)的平滑處理
matlab數(shù)據(jù)的平滑處理
matlab數(shù)據(jù)的平滑處理
matlab數(shù)據(jù)的平滑處理

 

例中,調用smoothts函數(shù),用3種不同的方法(盒子法,高斯窗法,指數(shù)法),每種方法設定兩種不同的窗寬,對收盤價數(shù)據(jù)進行了平滑處理,并做出平滑曲線,原始收盤價曲線比較曲折,不夠光滑,從圖中可以看出,前兩種方法在端點處的平滑效果不是很好,最后一種方法在右尾部的處理有些失真。但在數(shù)據(jù)的中段,這三種方法的平滑效果比較好,并且隨著窗寬的增大,平滑后的曲線的光滑性也在增強,但光滑度增強的同時也造成了失真。

1.3 medfilt1函數(shù)平滑處理

MATLAB信號處理工具箱中提供了medfilt1函數(shù),用來對信號數(shù)據(jù)進行一維中值濾波,其調用格式如下:

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

對向量x進行一維中值濾波,返回與x等長的向量y。這里的n是窗寬參數(shù),當n是奇數(shù)時,y的第k個元素等于x的第k-(n-1)/2個元素至k+(n-1)/2個元素的中位數(shù);當n是偶是,y的第k個元素等于x的第k-n/2個元素至第k+n/2-1個元素的中位數(shù)。n的默認值為3

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

默認情況下,blksz=length(x)。當x是一個矩陣時,通過循環(huán)對x的各列進行一維中值濾波,返回對x的各列進行一維中值濾波,返回與x具有相同行數(shù)和列數(shù)的矩陣y

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

用dim參數(shù)指定沿x的哪個維進行濾波

例:產(chǎn)生一正弦信號,加入噪聲,然后調用medfilt1函數(shù)對加入噪聲的正弦波進行平滑處理(濾波)

t=linspace(0,2*pi,500); %產(chǎn)生一個從0到2*pi的向量,長度為500

y=100*sin(t);

noise=normrnd(0,15,1,500); %產(chǎn)生1行500列的服從N(0,15^2)分布的隨機數(shù),作為噪聲信號

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數(shù)據(jù)的平滑處理
matlab數(shù)據(jù)的平滑處理

 

本文由網(wǎng)上采集發(fā)布,不代表我們立場,轉載聯(lián)系作者并注明出處:http://m.zltfw.cn/shbk/39797.html

聯(lián)系我們

在線咨詢:點擊這里給我發(fā)消息

微信號:15705946153

工作日:9:30-18:30,節(jié)假日休息