使用matlab自帶的polyfit函式,可以很方便地根據現有樣本資料進行多項式曲線擬合,為了有直觀感受,先上例程,如下所示:
1 x = -5:0.1:5; %樣本資料x座標執行結果:2 y = 3*x.^2 + 6*x + 5 + randn(size(x)); %樣本資料y座標,新增隨機雜訊
34 p = polyfit(x, y, 2); % 使用自帶函式進行資料擬合,擬合的多項式維數n=2
5 yy = polyval(p, x); %生成擬合資料
67 figure, plot(x, y, '
.'); %顯示原始資料
8 xlabel('
x'), ylabel('
y'); %座標軸
9 hold on, plot(x, yy, '
r', '
linewidth
', 2); %顯示擬合資料
10 legend('
raw data
', '
fitting line
'); % 圖例
函式說明:
p = polyfit(x,y,n) returns the coefficients for a polynomial p(x) of degree n that is a best fit (in a least-squares sense) for the data in y. the coefficients in p are in descending powers, and the length of p is n+1
即,polyfit(x,y,n) 返回對應於樣本資料y的n維多項式p(x)的係數(基於最小二乘法)。該係數按照降冪順序排列,個數為 n+1
基本原理:給定一組資料[x1,x2,…,xn]和[y1,y2,…yn],已知x和y成基本線性關係,即存在一條最佳擬合直線y = kx + b,對此,同樣可以基於最小二乘法來求出係數k和b。此時,呼叫polyfit(x,y,n)時,應取n=1,即把直線擬合看作是一階多項式的擬合,在此不再贅述。
另外,還可以使用基於矩陣除法的直線擬合方法,基本原理如下:
例程:
1 %基於矩陣除法的直線擬合執行結果:2 x = [0.5
11.5
22.5
3];
3 y = [1.75
2.45
3.81
4.88
8.6];
45 n =length(x);
6 x = reshape(x,n,1); %生成列向量
7 y = reshape(y,n,1
);
8 a = [x,ones(n,1)]; %連線矩接a
910 yy = a \ y; % 左除,相當於inv(a)*y
1112 k = yy(1); %得到k
13 b = yy(2); %得到b
1415 yy = polyval([k, b], x); %生成擬合資料
16figure,
17 plot(x, y, '*'
);18 hold on, plot(x, yy, '
r'); % 顯示擬合曲線
C 學以致用(2)
如果第乙個運算物件是負數,那麼求模結果為負數 如果第乙個運算物件是正數,那麼求模結果也是正數。printf d d n 11 5,11 5 printf d d n 11 5,11 5 printf d d n 11 5,11 5 printf d d n 11 5,11 5 程式執行結果 2 1 ...
MATLAB 曲線擬合
x0.1 0.20.15 0.0 0.2 0.3y 0.95 0.84 0.86 1.06 1.50 0.72 函式功能多項式的擬合運算 呼叫方法polyfit x,y,n x為橫座標,y為縱座標,n為擬合階數。例子x 0 0.1 2.5 1y erf x p polyfit x,y,6 p 0.0...
matlab 曲線擬合
在matlab中經常需要對資料進行曲線擬合,如最常見的多項式擬合,一般可以通過cftool呼叫曲線擬合工具 curve fit tool 通過圖形介面可以很方便的進行曲線擬合,但是有些時候也會遇到不方便用圖形工具。因此這裡簡單的記下兩種常用的擬合方法。1 多項式擬合 polyfit和polyval ...