一、多項式擬合
clear all
clcx = [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 階多項式擬合
y5 = polyval(p5,x);
p5 = vpa(poly2sym(p5),5) %顯示 5 階多項式
p9 = polyfit(x,y,9); % 9 階多項式
y9 = polyval(p9,x);
figure; %畫圖
plot(x,y,'bo');
hold on;
plot(x,y5,'r:');
plot(x,y9,'g--');
legend('原始資料','5 階多項式擬合','9 階多項式擬合');
xlabel('x');
xlabel('y');
二、加權最小方差(wls)擬合原理及例項
function [th,err,yi] = polyfits(x,y,n,xi,r)
% x,y:資料點系列
% n:多項式擬合的系統
% r:加權係數的逆矩陣
m = length(x);
x = x(:);
y = y(:);
% 判斷呼叫函式的格式
if nargin == 4
% 當呼叫的格式為 (x,y,n,r)
if length(xi) == m
r = xi;
xi = x;
% 當呼叫的格式為(x,y,n,xi)
else r = 1;
end;
% 當呼叫格式為(x,y,n)
elseif nargin == 3
xi = x;
r = 1;
end% 求解係數矩陣
a(:,n+1) = ones(m,1);
for n = n:-1:1
a(:,n) = a(:,n+1).*x;
endif length(r) == m
for m =1:m
a(m,:) = a(m,:)/r(m);
y(m) = y(m)/r(m);
endend
% 計算擬合係數
th = (a\y)';
ye = polyval(th,x);
err = norm(y-ye)/norm(y);
yi = polyval(th,xi);
clear all
clcx = [-3:1:3]';
y = [1.1650 0.0751 -0.6965 0.0591 0.6268 0.3516 1.6961]';
[x,i] = sort(x);
y = y(i);
xi = min(x) + [0:100]/100*(max(x) - min(x));
for i = 1:4
n = 2*i-1;
[th,err,yi] = polyfits(x,y,n,xi);
subplot(2,2,i)
plot(x,y,'o')
hold on
plot(xi,yi,'-')
grid on
end
三、非線性曲線擬合
已知輸入向量 xdata 和輸出向量 ydata,且長度都是 n,使用最小二乘非線性擬合函式:ydata(i) = x(1)·xdata(i)^2+x(2)·\sin(xdata(i))+ x(3)·xdata(i)^3
根據題意可知,目標函式為:\(min_x \frac\displaystyle^n}(f(x,xdata_i)-ydata_i)^2\)
其中:f(x,xdata) = x(1)·xdata^2+x(2)\sin(xdata)+x(3)·xdata^3
初始解向量定位 x0 = [0.3,0.4,0.1]
首先建立擬合函式檔案 ex1024.m
function f = ex1024(x,xdata)
f = x(1)*xdata.^2 + x(2)*sin(xdata) + x(3)*xdata.^3;
clear all
clcxdata = [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];
ydata = [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];
x0 = [10,10,10];
[x,resnorm] = lsqcurvefit(@ex1024,x0,xdata,ydata)
posted @
2018-08-12 20:02
nikki_o3o 閱讀(
...)
編輯收藏
MATLAB曲線擬合函式
一 多項式擬合 clear all clcx 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 階多項式擬合 y5 polyval p5,x p5 vpa poly2sym p5 5 顯示...
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 ...