一、定義
與插值問題不同,在擬合問題中不需要曲線一定經過給定的點。擬合問題的目標是尋求一個函數(曲線),使得該曲線在某種准則下與所有的數據點最為接近,即曲線擬合的最好(最小化損失函數)。
二、評價擬合的好壞
注:線性函數指的是對參數為線性
三、MATLAB中擬合工具箱的使用
1.基礎操作
2.生成圖片(提高清晰度)
(1)選擇導出設置
(2)渲染-分辨率-600
(3)導出
3.生成代碼
4.結合例子的具體使用
例子如下:
具體步驟:
打開擬合工具箱后:
(1) X data 選擇 year
(2) Y data 選擇 population
(3) 擬合方式選擇:Custom Equation (自定義方程)
(4) 修改下方的方框為:x = f(t) = xm/(1+(xm/3.9-1)exp(-r(t-1790)))
(5) 左邊的result一欄最上面顯示:Fit computation did not converge:即沒有找到收斂解,右邊的擬合圖形也表明擬合結果不理想
(6) 點擊Fit Options,修改非線性最小二乘估計法擬合的初始值(StartPoint), r修改為0.02,xm修改為500(初始值為什么這么設置還不是很清楚)
(7) 此時左邊的result一覽得到了擬合結果:r = 0.02735, xm = 342.4
(8) 依次點擊擬合工具箱的菜單欄最左邊的文件—Generate Code(導出代碼到時候可以放在你的論文附錄),可以得到一個未命名的腳本文件
(9) 在這個打開的腳本中按快捷鍵Ctrl+S,將這個文件保存到當前文件夾。
(10) 在現在這個文件中調用這個函數得到參數的擬合值和預測的效果
用擬合工具箱生成的相應代碼
function [fitresult, gof] = createFit(year, population)
%% Fit: 'untitled fit 1'.
[xData, yData] = prepareCurveData( year, population );
% Set up fittype and options.
ft = fittype( 'x/(1+(x/3.9-1)*exp(-r*(t-1790)))', 'independent', 't', 'dependent', 'y' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Display = 'Off';
opts.StartPoint = [0.02 500];
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts );
% Plot fit with data.
figure( 'Name', 'untitled fit 1' );
h = plot( fitresult, xData, yData );
legend( h, 'population vs. year', 'fit fuction', 'Location', 'NorthEast', 'Interpreter', 'none' );
% Label axes
xlabel( 'year', 'Interpreter', 'none' );
ylabel( 'population', 'Interpreter', 'none' );
grid on
題目要求是預測三十年后的美國人口:
1.用擬合計算出的xm = 342.4; r = 0.02735;代入擬合函數計算預測值,放入predictions變量中
population_predict.m代碼
clear;clc
year = 1790:10:2000;
population = [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4,281.4];
%plot(year,population,'o')
cftool % 擬合工具箱
[fitresult, gof] = createFit(year, population)%單步執行所選內容即可得擬合結果圖像
t = 2001:2030;
xm = 342.4;
r = 0.02735;
predictions = xm./(1+(xm./3.9-1).*exp(-r.*(t-1790))); % 計算預測值(注意這里要寫成點乘和點除,這樣可以保證按照對應元素進行計算)
%figure(2)
% plot(year,population,'o',t,predictions,'.') % 繪制預測結果圖
2.運行后在工作區雙擊predictions,將其值復制粘貼到excel表格中,調整一下格式導數數據表格。
3.繪制預測曲線