開源免費建站程序用的最多的中國站免費推廣入口
目錄
一.理論知識
1.擬合與插值的區(qū)別
2.幾何意義
3.誤差分析
二.操作實現(xiàn)
1.數(shù)據(jù)準備
2.使用cftool——擬合工具箱?
三.函數(shù)擬合典例
四.代碼擴展
一.理論知識
1.擬合與插值的區(qū)別
通俗的說,插值的本質是根據(jù)現(xiàn)有離散點的信息創(chuàng)建出更多的離散點,從而不斷提高精度;而擬合則不需要找到更多的點,目標在于根據(jù)已知的點構造出一條函數(shù),使得每點上的誤差盡可能地低——即曲線擬合的最好(最小化損失函數(shù))。
2.幾何意義
本質來說,就是盡可能找到——能經(jīng)過當前全部點且誤差最小的曲線。
理論部分這里不細說,涉及到最小二乘法,大家自行查資料~
3.誤差分析
二.操作實現(xiàn)
1.數(shù)據(jù)準備
x | 4.2 | 5.9 | 2.7 | 3.8 | 3.8 | 5.6 | 6.9 |
y | 8.4 | 11.7 | 4.2 | 6.1 | 7.9 | 10.2 | 13.2 |
x | 3.5 | 3.6 | 2.9 | 4.2 | 6.1 | 5.5 | 6.6 |
y | 6.6 | 6 | 4.6 | 8.4 | 12 | 10.3 | 13.3 |
2.使用cftool——擬合工具箱?
?如上圖,在APP菜單欄中找到“Curve?Fitting”打開工具箱,或者在命令行輸入:
cftool
在工具箱頁面的左上角,選擇x與y對應的變量。
?然后右下角就會出現(xiàn)函數(shù)圖像,這是未擬合前的默認形態(tài)。?
然后即可選擇擬合方式,通常情況下多項式擬合即可得到不錯的效果。?
?如上圖,即為4次多項式擬合的效果。
如上是有關擬合誤差的一些數(shù)據(jù),需要重點關注的是:
- R值——擬合優(yōu)度:當R值大于0.9或0.95時,即可認為擬合出來的函數(shù)可信度很高。
- 另外SSE等有關殘差的參數(shù)也可以注意一下?
左下角給出了一些擬合結果的內(nèi)容,如上圖可知:
y=-0.07001*x^4+1.458*x^3-11.04*x^2+37.95*x-43.02,即為本次擬合出的函數(shù)方程!?
三.函數(shù)擬合典例
上圖是2021年亞太數(shù)學建模中繪制的圖片,根據(jù)有限數(shù)據(jù)量進行擬合得出具有函數(shù)性質的關系曲線?
代碼如下:
Time=[2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018];
I1=[0.182948847,0.211434303,0,0.030892678,0.279638917,0.469635573,0.493306586,0.538642594,0.546666667,0.487288532,0.955466399,0.927382146,0.91334002,0.934603811,0.960280843];
I2=[0.022145329,0.034602076,0.033910035,0.028373702,0.044982699,0.195555556,0.277216455,0.342268358,0.349880815,0.364413687,0.919031142,0.990311419,1,0.948096886,0.948096886];
I3=[0.521140071,0.392131831,0.174670582,0.220460164,0.162032973,0.340698155,0.222348372,0.327533528,0.244249827,0.359156053,0.245644824,0.454187732,0.646707562,0.905064612,1];
I4=[0.36938131,0.374916005,0.117566088,0.148750878,0.372001753,0.388274379,0.51190998,0.705307237,0.695969953,0.706219511,0.591608401,0.759083664,0.819291342,0.822706134,0.874415287];
figure;
%% Create a canvas
a=polyfit(Time,I1,3);
plot(Time,I1,'.',Time,polyval(a,Time));%% Lock the current canvas,renders four function images on a single graph
hold on
b=polyfit(Time,I2,3);
plot(Time,I2,'.',Time,polyval(b,Time));
hold on
c=polyfit(Time,I3,3);
plot(Time,I3,'.',Time,polyval(c,Time));
hold on
d=polyfit(Time,I4,3);
plot(Time,I4,'.',Time,polyval(d,Time));
hold off
%% The command drawing part is finished, and the subsequent design is completed by graphic editing tools
%% FLG files will appear in the support material
四.代碼擴展
1.計算誤差
y_hat = k*x+b; % y的擬合值
SSR = sum((y_hat-mean(y)).^2) % 回歸平方和
SSE = sum((y_hat-y).^2) % 誤差平方和
SST = sum((y-mean(y)).^2) % 總體平方和
SST-SSE-SSR % 5.6843e-14 = 5.6843*10^-14 matlab浮點數(shù)計算的一個誤差
R_2 = SSR / SST
2.產(chǎn)生隨機數(shù)的一些操作:
% (1)randi : 產(chǎn)生均勻分布的隨機整數(shù)(i = int)
%產(chǎn)生一個1至10之間的隨機整數(shù)矩陣,大小為2x5;
s1 = randi(10,2,5)
%產(chǎn)生一個-5至5之間的隨機整數(shù)矩陣,大小為1x10;
s2 = randi([-5,5],1,10)% (2) rand: 產(chǎn)生0至1之間均勻分布的隨機數(shù)
%產(chǎn)生一個0至1之間的隨機矩陣,大小為1x5;
s3 = rand(1,5)
%產(chǎn)生一個a至b之間的隨機矩陣,大小為1x5; % a + (b-a) * rand(1,5); 如:a,b = 2,5
s4= 2 + (5-2) * rand(1,5)% (3)normrnd:產(chǎn)生正態(tài)分布的隨機數(shù)
%產(chǎn)生一個均值為0,標準差(方差開根號)為2的正態(tài)分布的隨機矩陣,大小為3x4;
s5 = normrnd(0,2,3,4)% (4)roundn—任意位置四舍五入
% 0個位 1十位 2百位 -1小數(shù)點后一位
a = 3.1415
roundn(a,-2) % ans = 3.1400
roundn(a,2) % ans = 0
a =31415
roundn(a,2) % ans = 31400
roundn(5.5,0) %6
roundn(5.5,1) %10
寫在最后:對于數(shù)學建模競賽來說,擬合并不是一種很高端的計算手段——僅在需要明確的函數(shù)方程時才建議使用。對于預測類的問題,建議使用回歸、灰色預測、BP神經(jīng)網(wǎng)絡等模型。