MATLAB曲線擬合及Fourier分析

2021-02-19 校苑數模

4.6  曲線擬合

在上一節,已經介紹了數據插值,它要求原始數據是精確的,或具有較小的誤差。事實上,由於種種原因,實驗或測量中所獲得的數據總會有一定的誤差。在這種情況下,如果強求構造的函數(曲線)通過各插值節點,顯然是不合理的。為此,人們設想構造一個函數(曲線)y=g(x)去擬合f(x),但它不必通過各插值節點,而只是使該曲線從這些插值節點中穿過,且使它在某種意義下最優。

MATLAB的曲線擬合是用常見的最小二乘原理,所構造的g(x)是一個次數小於擬合節點個數的多項式。

4.6.1  最小二乘原理及其曲線擬合算法

設測得離散的n+1個節點的數據如下:

構造一個如下的m次擬合多項式函數g(x)為 (m≤n):

所謂曲線擬合的最小二乘原理,就是使上述擬合多項式在各數據點處的偏差的平方之和達最小。

上式中的均為已知值,而式中的係數為個未知數,故可以將其看做是的函數,即。於是我們可以把上述曲線擬合歸結成對多元函數的求極值問題。為使取極小值,必須滿足以下方程組:

經過簡單的推導,可以得到一個m+1階線性代數方程組Sa=t,其中S為m+1階係數矩陣,t為右端項,而a為未知數向量,即欲求的m次擬合多項式的m+1個係數。這個方程組也稱為正則方程組。至於正則方程組的具體推導,可參閱有關數值計算方法的教材。

4.6.2  曲線擬合的實現

在MATLAB中,可以用polyfit函數來求最小二乘擬合多項式的係數,另外可以用polyval函數按所得的多項式計算指定值。

polyfit函數的調用語法是:

[p,s]=polyfit(x,y,m)

輸入參數x,y為測量而得的原始數據,為向量;m為欲擬合的多項式的次數。polyfit (x,y,m)將根據原始數據x、y得到一個m次擬合多項式P(x)的係數,該多項式能在最小二乘意義下最優地近似函數f(x),即有p(xi)≈f(xi)≈yi。

返回的結果中p為m次擬合多項式的係數,而s中的數據則是一個結構數組,代入polyval函數後可以得到擬合多項式相關的誤差估計。s最常用的寫法可以是:p=polyfit(x,y,M)。

polyval的函數功能是按多項式的係數計算指定點所對應的函數值。

【例4-43】  曲線擬合示例。

本例首先在多項式的基礎上加入隨機噪聲,產生測試數據,然後對測試數據進行數據曲線擬合:

>> clear

>> rand('state',0)                 

>> x=1:1:10;

>> y=-0.9*x.^2+10*x+20+rand(1,10).*5; %  產生測試數據

>> plot(x,y,'o')                  %  繪圖並標出原始數據點

>> p=polyfit(x,y,2)

>> xi=1:0.5:10;

>> yi=polyval(p,xi);                     % 計算擬合的結果

>> hold on

>> plot(xi,yi);                   %  繪製擬合結果圖

>> hold off

運行以上命令,得到的結果如圖4-10所示。另外得到的多項式係數為:

p =

   -0.8923    9.8067   23.6003

也就是說通過曲線擬合,得到了多項式。通過比較係數和觀察圖形,可以看出本次曲線擬合結果的精度是比較高的。

圖4-10  曲線擬合

 

4.7  Fourier分析

傅立葉(Fourier)分析在信號處理領域有著廣泛的應用,現實生活中大部分的信號都包含有多個不同的頻率組件,這些信號組件頻率會隨著時間或快或慢的變化。傅立葉級數和傅立葉變換是用來分析周期或者非周期信號的頻率特性的數學工具。從時間的角度來看,傅立葉分析包括連續時間和離散時間的傅立葉變換,總共有4種不同的傅立葉分析類型:連續時間的傅立葉級數、連續時間的傅立葉變換、離散時間的傅立葉級數、離散時間的傅立葉變換等。

頻譜分析是在數據中識別頻率組成的處理過程。對於離散數據,頻譜分析的計算基礎是離散傅立葉變換(DFT)。DFT將time-based或者space-based數據轉換為frequency-based數據。

一個長度為n的向量x的DFT,也是一個長度為n的向量:

其中是n階複數根:

在此表達式中,i表示虛數單位 。

DFT有一種快速算法FFT,稱為快速傅立葉變換。FFT並不是與DFT不同的另一種變換,而是為了減少DFT運算次數的一種快速算法。它是對變換式進行一次分解,使其成為若干個小數點的組合,從而減少運算量。常用的FFT是以2為基數的,其長度用N表示,N為2的整數倍。

MATLAB中採用的就是FFT算法。MATLAB提供了函數fft和ifft等來進行傅立葉分析。

1.函數fft和ifft

函數fft和ifft對數據作一維快速傅立葉變換和傅立葉反變換,函數fft的調用語法有如下幾種。

(1)Y=fft(X):如果X是向量,則採用快速傅立葉變換算法作X的離散傅立葉變換;如果X是矩陣,則計算矩陣每一列的傅立葉變換。

(2)Y=fft(X,n):用參數n限制X的長度,如果X的長度小於n,則用0補足;如果X的長度大於n,則去掉長出的部分。

(3)Y=fft(X,[ ],n)或Y=fft(X,n,dim):在參數dim指定的維上進行操作。

函數ifft的用法和fft完全相同。

2.fft2和ifft2

函數fft2和ifft2對數據作二維快速傅立葉變換和傅立葉反變換。數據的二維傅立葉變換fft2(X)相當於fft(fft(X)』)』,即先對X的列做一維傅立葉變換,然後對變換結果的行做一維傅立葉變換。函數fft2的調用語法有如下幾種。

(1)Y=fft2(X):二維快速傅立葉變換。

(2)Y=fft2(X,MROWS,NCOLS):通過截斷或用0補足,使X成為MROWS*NCOLS的矩陣。

函數ifft2的用法和fft2完全相同。

3.fftshift和ifftshift

函數fftshift(Y)用於把傅立葉變換結果Y(頻域數據)中的直流分量(頻率為0處的值)移到中間位置:

(1)如果Y是向量,則交換Y的左右半邊;

(2)如果Y是矩陣,則交換其一三象限和二四象限;

(3)如果Y是多維數組,則在數組的每一維交換其「半空間」。

函數ifftshift相當於把fftshift函數的操作逆轉,用法相同。

【例4-44】  生成一個正弦衰減曲線,進行快速傅立葉變換,並畫出幅值(amplitude)圖、相位(phase)圖、實部(real)圖和虛部(image)圖。

>> tp=0:2048;                             %  時域數據點數N

>> yt=sin(0.08*pi*tp).*exp(-tp/80);      %  生成正弦衰減函數

>> plot(tp,yt), axis([0,400,-1,1]),      %  繪正弦衰減曲線

>> t=0:800/2048:800;                       %  頻域點數Nf

>> f=0:1.25:1000;

>> yf=fft(yt);                             %  快速傅立葉變換

>> ya=abs(yf(1:801));                      %  幅值

>> yp=angle(yf(1:801))*180/pi;            %  相位

>> yr=real(yf(1:801));                    %  實部

>> yi=imag(yf(1:801));                     %  虛部

>> figure

>> subplot(2,2,1)

>> plot(f,ya),axis([0,200,0,60])        %  繪製幅值曲線

>> title('幅值曲線')

>> subplot(2,2,2)

>> plot(f,yp),axis([0,200,-200,10])     %  繪製相位曲線

>> title('相位曲線')

>> subplot(2,2,3)

>> plot(f,yr),axis([0,200,-40,40])      %  繪製實部曲線

>> title('實部曲線')

>> subplot(2,2,4)

>> plot(f,yi),axis([0,200,-60,10])      %  繪製虛部曲線

>> title('虛部曲線')

本例首先生成正弦衰減函數yt,繪製的正弦衰減曲線如圖4-11所示。然後對yt進行了快速傅立葉變換,結果如圖4-12所示。

圖4-11  正弦衰減曲線圖 

圖4-12  傅立葉變換結果

相關焦點

  • MATLAB萬能實用的非線性曲線擬合方法
    在科學計算和工程應用中,經常會遇到需要擬合一系列的離散數據,最近找了很多相關的文章方法,在這裡進行總結一下其中最完整、幾乎能解決所有離散參數非線性擬合的方法根據你的實際問題得到一系列的散點例如:根據上述的實際散點確定應該使用什麼樣的曲線,或者說是想要模擬的曲線
  • 總結MATLAB的線性擬合和非線性擬合函數參數
    曲線擬合是一種函數逼近的方法。可以分為線形擬合和非線性擬合。曲線擬合的原理:對於y = f(x),通過構造一個函數g(x)取逼近未知函數f(x),使得誤差在某種意義下達到最小。一般使用多項式函數作為逼近函數,使用最小二乘法計算誤差最小。曲線擬合的實現方法:使用polyfit()函數,其功能為求得最小二乘擬合多項式係數。
  • MATLAB非線性擬合函數nlinfit函數
    /log(x);endMATLAB相關內容往期回顧MATLAB中繪製三維圖形MATLAB的輸入輸出input函數matlab詳細介紹畫柱形圖matlab中矩陣的入門知識matlab中legend函數的用法matlab
  • Matlab優化擬合曲線
    分享一下使用非線性函數對數據進行擬合。
  • 強大的matlab數據科學擬合庫cftool——直接導入數據進行擬合
    對於使用過matlab做數據處理的人來說,擬合是將平面上一系列的點,用一條光滑的曲線連接起來。因為這條曲線有無數種可能,從而有各種擬合方法。擬合的曲線一般可以用函數表示,根據這個函數的不同有不同的擬合名字。
  • 【科研心得】基於MATLAB的曲線擬合
    另外,Excel上繪製散點圖之後也可以快速進行曲線擬合併給出擬合優度R2,回歸係數或截距等參數,但是Excel在這裡並不能給出統計學檢驗,並且並不是很User-friendly,加之基於Excel的統計學分析則需要添加Data Analysis的插件才可以,另外SPSS其實也可以勝任各類統計學分析,但SPSS需要比較詳盡的設定才能run出比較合適的結果,並且它無法像MATLAB這樣可以做到一步步運算並讓用戶體會到計算思路
  • MATLAB的lsqcurvefit函數擬合非線性式子中的未知參數
    ,'fontsize',15)%axis([1 10 1 200]);%坐標範圍%set(gca,『xtick』,[1 2 …10]);%X軸設定%set(gca,『ytick』,[1 20 40 …200]);%Y軸設定figure(2)plot(len,len1,'r-')legend('擬合曲線')title('擬合曲線圖','fontsize',15)ylabel('Y','fontsize
  • MATLAB通過優化擬合曲線
    其中,y(t) 是時間 t 時的響應,A 和 λ 是要擬合的參數。其中,時間為 ti,響應為 yi,i=1,…,n。誤差平方和為目標函數。通常,您要通過測量獲得數據。檢查擬合質量要檢查擬合質量,請繪製數據和生成的擬合響應曲線。根據返回的模型參數創建響應曲線。
  • Matlab曲線擬合和插值
    MATLAB軟體提供了基本的曲線擬合函數的命令.
  • MATLAB 蒙特卡洛方法編程並舉例分析
    詳細介紹畫柱形圖matlab中矩陣的入門知識matlab中legend函數的用法matlab繪圖--線性規劃圖解法示意Matlab 進度條的製作Matlab對fig文件導出數據Matlab中plot函數全功能解析Matlab的fmincon函數求解非線性規劃MATLAB線性規劃函數求解線性規劃
  • Matlab擬合詳解
    更為強大的fit函數一維多項式擬合(曲線) 定義函數,根據指定函數文件進行擬合x = [0.81;0.91;0.13;0.91;0.63;0.098;0.28;0.55;...
  • MATLAB繪製帶置信區間的擬合曲線
    曲線擬合是已知離散點上的數據集,構造一個解析函數(其圖形為一曲線),使在原離散點上儘可能接近給定的值。
  • 【基礎教程】Matlab 曲線擬合之polyfit與polyval函數
    xx=linspace(min(x),max(x)); % 繪圖用到的點的橫坐標yy=polyval(p1,xx); % 擬合曲線的縱坐標plot(x,y,'-or',x1,y1,'-ob',xx,yy); % 繪圖,原始數據+擬合曲線hold on;grid on;b0 = [y(1),-1];%設置初始值;Xi=linspace(min(x),max(x)); % 繪圖用到的點的橫坐標b
  • 線性擬合與曲線擬合,直接在圖上添加擬合曲線、擬合方程、判別係數...
    2、什麼是曲線擬合?真實世界研究中,變量間不一定是線性關係,比如疾病療效與療程長短的關係、服藥後血藥濃度與時間的關係等常呈曲線關係。此時,線性擬合效果不佳,曲線擬合提供了一個很好的解決思路。曲線擬合(Curve Fitting)是指選擇適當的曲線類型來擬合觀測數據,並用擬合的曲線方程分析兩個變量之間的關係。也可以說曲線擬合就是使用某個模型(或者稱為方程),將一系列的數據擬合出平滑的曲線,以便觀察兩組數據之間的內在聯繫,了解數據之間的變化趨勢。通過對數據進行曲線擬合,我們不但能找到數據中潛在的某種規律,還能對數據的變化進行預測。
  • MATLAB中,你必須知道的!(二)
    fourier(f):返回以默認變量x為數量符號f的Fourier變換,其中變換後函數默認以w為自變量。 fourier(f,v):以v替代w為變換後的函數自變量。 fourier(f,u,v):以v替代w,以u提到x ifourier也是類似的。 拉普拉斯變換用法:laplace 和ilaplace都是類似的。
  • 應用matlab進行多項式擬合
    採用matlab軟體中的polyfit()函數進行多項式擬合,分別採用5階多項式和9階多項式進行擬合,並對擬合結果進行繪圖對比。clc;clear all;x=[0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8];y=[1 2 3 5 6 7 6 5 4 1 ]; p5=polyfit(x,y,5); %5階多項式擬合
  • 如何使用Matlab編程進行參數擬合
    x=[ones(10,1) (1:10)']y=x*[10;1]+normrnd(0,0.1,10,1)[b,bint, r,rint,stats]=regress(y,x,0.05)rcoplot(r,rint)4.2簡單線性模型-多項式擬合多項式曲線擬合函數:polyfit( )
  • Matlab 入門教程 | 014 曲線擬合:如何預測2030年中國總人口?
    通過數學模型能夠對天文、地理、物理、化學、社會、經濟等各領域的問題進行分析、預測。數學模型有難易之分,但建模的過程是相似的。今天我們以一個簡單的例子來說明如何使用Matlab進行曲線擬合和對數據進行分析預測。
  • 如何利用Origin進行曲線擬合?
    Origin 提供了強大的線性回歸和函數擬合功能,其中最有代表性的是線性回歸和非線性最小平方擬合。曲線擬合(curve fitting)是指選擇適當的曲線類型來擬合數據,並用擬合的曲線方程分析兩個變量之間的關係。通過對數據進行曲線擬合,我們不但能找到它的變化規律,還能對數據的變化進行一定程度的預測。
  • MATLAB的ezplot函數繪製隱函數圖像
    當x 為一實矩陣時,則以其序號為橫坐標,按列繪製每列元素值相對於其序號的曲線,當x 為m× n 矩陣時,就有n 條曲線。(2)plot(x,y) 以x 元素為橫坐標值,y 元素為縱坐標值繪製曲線。(3)plot(x,y1,x,y2,…)以公共的x 元素為橫坐標值,以y1,y2,… 元素為縱坐標值繪製多條曲線。