一、資料拟合方法
1.1多項式拟合
(1)拟合指令
polyift(X,Y,N);多項式拟合,傳回降幂排列的多項式系數
polyval(P,xi):計算多項式的值
拟合示例:
x = [1 2 3 4 5 6 7 8 9];
y = [9 7 6 3 -1 2 5 7 20];
P = polyfit(x,y,3);
xi = 0:.2:10;
yi = polyval(P,xi);
plot(xi,yi,x,y,'r*');
(2)圖形視窗多項式拟合
x = [1 2 3 4 5 6 7 8 9];
y = [9 7 6 3 -1 2 5 7 20];
plot(x,y,'r*');
然後在圖形視窗單擊 工具——基本拟合,選用線性、二次項、三次項進行拟合。
1.2指定函數拟合
原始資料
編寫m檔案
syms t
x = [0;0.4;1.2;2;2.8;3.6;4.4;5.2;6;7.2;8;9.2;10.4;11.6;12.4;13.6;14.4;15];
y = [1;0.85;0.29;-0.27;-0.53;-0.4;-0.12;0.17;0.28;0.15;-0.03;-0.15;-0.071;0.059;0.08;0.032;-0.015;-0.02];
f = fittype('a*cos(k*t)*exp(w*t)','independent','t','coefficients',{'a','k','w'});
cfun = fit(x,y,f) %顯示拟合函數
xi = 0:.1:20;
yi = cfun(xi);
plot(x,y,'r*',xi,yi,'b-');
程式中,函數fittype是自定義拟合函數;cfun=fit(x,y,f)根據自定義的拟合函數f來拟合資料x,y。
1.3曲線拟合工具箱
在控制台直接輸入cftool指令
二、資料拟合執行個體
2.1人口預測模型
表中是某地區1971——2000年的人口資料,試給出該地區人口增長的數學模型。
首先給出人口資料的散點圖
從圖中可以看出,人口随時間的變化呈非線性過程,而且存在一個與橫坐标軸平行的漸近線,故可用Logistic曲線模型進行拟合。
% 讀入人口資料(1971-2000)
Y = [33815 33981 34004 34165 34212 34327 34344 34458 34498 34476 34483 34488 34513 34497 34511 34520 34507 34509 34521 34513 34515 34517 34519 34519 34521 34521 34523 34525 34525 34527];
% 讀入時間變量資料(t = 年份-1970)
T = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30];
plot(T,Y,'r*')
% 線性化處理
for t = 1:30,
x(t) = exp(-t);
y(t) = 1/Y(t);
end
% 計算,并輸出回歸系數B
c = zeros(30,1)+1;
X = [c,x'];
B = inv(X'*X)*X'*y'
for i=1:30,
% 計算回歸拟合值
z(i) = B(1,1)+B(2,1)*x(i);
% 計算離差
s(i) = y(i) - sum(y)/30;
% 計算誤差
w(i) = z(i) - y(i);
end
% 計算離差平方和S
S = s*s';
% 回歸誤差平方和Q
Q = w*w';
% 計算回歸平方和U
U = S-Q;
% 計算,并輸出F檢驗值
F= 28*U/Q
% 計算非線性回歸模型的拟合值
for j=1:30,
Y(j) = 1/(B(1,1)+B(2,1)*exp(-j));
end
%輸出非線性回歸模型的拟合曲線
plot(T,Y)
2.2薄膜滲透率測定
三、資料可視化
地形地貌圖的繪制
首先是要将未測量地點的高度用資料插值的方法求出來,然後就可以用MATLABA繪圖方法畫出地貌圖。
[x,y] = meshgrid(1:10); %構造測量網絡
h = [0,0.02,-0.12,0,-2.09,0,-0.58,-0.08,0,0;
0.02,0,0,-2.38,0,-4.96,0,0,0,-0.1;
0,0.1,1,0,-3.04,0,-0.53,0,0.1,0;
0,0,0,3.52,0,0,0,0,0,0;
-0.43,-1.98,0,0,0,0.77,0,2.17,0,0;
0,0,-2.29,0,0.69,0,2.59,0,0.3,0;
-0.09,-0.31,0,0,0,4.27,0,0,0,-0.01;
0,0,0,5.13,7.4,0,1.89,0,0.04,0;
0.1,0,0.58,0,0,1.75,0,-0.11,0,0;
0,-0.01,0,0,0.3,0,0,0,0,0.01]; %測量資料點
[xi,yi] = meshgrid(1:0.1:10); %構造插值網絡
hi = interp2(x,y,h,xi,yi,'spline'); %二維插值指令
surf(hi); %畫出地貌圖
xlabel('x'),ylabel('y'),zlabel('h'); %添加坐标名稱