天天看點

數學模組化——拟合

一、資料拟合方法

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');                %添加坐标名稱
           
數學模組化——拟合