1. 程式人生 > >MATLAB 最小二乘法

MATLAB 最小二乘法

[plain] view plain copy print?
  1. % 小車時間(xi)和位移關係(yi)關係  
  2. x = [0 1 2 3 4 5 6  7  8  9];  
  3. y = [0 2 4 7 8 9 12 14 15 18];  
  4. %{  
  5.     subplot(m,n,p) 其中前兩個引數 m,n是指將你的圖分成 m*n個柵格,  
  6.     每個柵格用 p 來編號,而編號是按行(橫著)編號的,所以,當 m = 2,n = 2時編號規則為  
  7.         1 | 2  
  8.         ------  
  9.         3 | 4  
  10.     所以subplot(2,2,[1 3]),就說明你這一個子圖佔據的是 1, 3兩個柵格,  
  11.     而subplot(2,2,2)說明子圖僅佔據第2個柵格.  
  12. %}  
  13. subplot(1,2,1);  
  14. plot(x,y,'o');  
  15. % 圖形的一些設定  
  16. xlabel('時間(秒)');  
  17. ylabel('位移(米)');  
  18. title('原始資料離散點')    
  19. %{  
  20.     grid on:是開啟網格  
  21.     grid off:是關閉網格  
  22.     而grid是切換兩種狀態,如果在grid off的狀態下,輸入grid,相當於grid on  
  23.     相反,如果在grid on狀態下輸入grid 等價於grid off  
  24. %}  
  25. grid on  
  26. %{  
  27.     polyfit函式是matlab中用於進行曲線擬合的一個函式。其數學基礎是最小二乘法曲線擬合原理。  
  28.     曲線擬合:已知離散點上的資料集,即已知在點集上的函式值,構造一個解析函式(其圖形為一曲線)使在原離散點上儘可能接近給定的值。  
  29.     呼叫方法:polyfit(x,y,n)。用多項式求過已知點的表示式,  
  30.         其中x為源資料點對應的橫座標,可為行向量、矩陣;  
  31.             y為源資料點對應的縱座標,可為行向量、矩陣;  
  32.             n為你要擬合的階數,一階直線擬合,二階拋物線擬合,並非階次越高越好,看擬合情況而定。  
  33.     多項式在x處的值y可用下面程式計算:y=polyval(a,x,m)  
  34. %}  
  35. p = polyfit(x,y,1)  
  36. % 0:0.01:9    起始為0,終點為9,步長0.01  
  37. x1 = 0:0.01:9;  
  38. y1 = polyval(p,x1);  
  39. x2 = 0:0.01:9;  
  40. %{  
  41.     MATLAB中的插值函式為interp1,其呼叫格式為:  yi= interp1(x,y,xi,'method')             
  42.     其中x,y為插值點,yi為在被插值點xi處的插值結果;x,y為向量,   
  43.     'method'表示採用的插值方法,MATLAB提供的插值方法有幾種:   
  44.         'nearest'是最鄰近插值, 'linear'線性插值; 'spline'三次樣條插值; 'pchip'立方插值.預設時表示線性插值  
  45.     注意:所有的插值方法都要求x是單調的,並且xi不能夠超過x的範圍。  
  46. %}  
  47. y2 = interp1(x,y,x2,'spline');  
  48. subplot(1,2,2);  
  49. plot(x1,y1,'k',x2,y2,'r')  
  50. xlabel('時間(秒)');  
  51. ylabel('位移(米)');  
  52. title('黑線為最小二乘法擬合,紅色為插值法擬合')    
  53. grid on  
% 小車時間(xi)和位移關係(yi)關係
x = [0 1 2 3 4 5 6  7  8  9];
y = [0 2 4 7 8 9 12 14 15 18];

%{
    subplot(m,n,p) 其中前兩個引數 m,n是指將你的圖分成 m*n個柵格,
    每個柵格用 p 來編號,而編號是按行(橫著)編號的,所以,當 m = 2,n = 2時編號規則為

        1 | 2
        ------
        3 | 4

    所以subplot(2,2,[1 3]),就說明你這一個子圖佔據的是 1, 3兩個柵格,
    而subplot(2,2,2)說明子圖僅佔據第2個柵格.
%}
subplot(1,2,1);
plot(x,y,'o');
% 圖形的一些設定
xlabel('時間(秒)');
ylabel('位移(米)');
title('原始資料離散點')  
%{
    grid on:是開啟網格
    grid off:是關閉網格
    而grid是切換兩種狀態,如果在grid off的狀態下,輸入grid,相當於grid on
    相反,如果在grid on狀態下輸入grid 等價於grid off
%}
grid on

%{
    polyfit函式是matlab中用於進行曲線擬合的一個函式。其數學基礎是最小二乘法曲線擬合原理。
    曲線擬合:已知離散點上的資料集,即已知在點集上的函式值,構造一個解析函式(其圖形為一曲線)使在原離散點上儘可能接近給定的值。
    呼叫方法:polyfit(x,y,n)。用多項式求過已知點的表示式,
        其中x為源資料點對應的橫座標,可為行向量、矩陣;
            y為源資料點對應的縱座標,可為行向量、矩陣;
            n為你要擬合的階數,一階直線擬合,二階拋物線擬合,並非階次越高越好,看擬合情況而定。

    多項式在x處的值y可用下面程式計算:y=polyval(a,x,m)
%}
p = polyfit(x,y,1)
% 0:0.01:9    起始為0,終點為9,步長0.01
x1 = 0:0.01:9;
y1 = polyval(p,x1);

x2 = 0:0.01:9;
%{
    MATLAB中的插值函式為interp1,其呼叫格式為:  yi= interp1(x,y,xi,'method')           
    其中x,y為插值點,yi為在被插值點xi處的插值結果;x,y為向量, 
    'method'表示採用的插值方法,MATLAB提供的插值方法有幾種: 
        'nearest'是最鄰近插值, 'linear'線性插值; 'spline'三次樣條插值; 'pchip'立方插值.預設時表示線性插值
    注意:所有的插值方法都要求x是單調的,並且xi不能夠超過x的範圍。
%}
y2 = interp1(x,y,x2,'spline');
subplot(1,2,2);
plot(x1,y1,'k',x2,y2,'r')
xlabel('時間(秒)');
ylabel('位移(米)');
title('黑線為最小二乘法擬合,紅色為插值法擬合')  
grid on