MATLAB 最小二乘法
阿新 • • 發佈:2018-12-31
[plain]
view plain
copy
print?
- % 小車時間(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
% 小車時間(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