一. 曲線插值和擬合
數(shù)模比賽中鹃祖,常常需要根據(jù)已知的函數(shù)點(diǎn)進(jìn)行數(shù)據(jù)、模型的處理和分析普舆,而有時(shí)候現(xiàn)有的數(shù)據(jù)是極少的恬口,不足以支撐分析的進(jìn)行,這時(shí)就需要使用一些數(shù)學(xué)的方法沼侣,“模擬產(chǎn)生”一些新的但又比較靠譜的值來滿足需求祖能,這就是插值的作用。
一維插值
對(duì)表格給出的函數(shù)蛾洛,求出沒有給出的函數(shù)
y = interp1(x0,y0,x,"method")
# 分段線性插值养铸,1是指一維
y = spline(x0,y0,x)
# 三次樣條插值
% x0,y0是已知節(jié)點(diǎn)的坐標(biāo),同維向量; y對(duì)應(yīng)于x處的插值轧膘,同維向量
% method["nearest"(最近鄰),"linear","spline","cubic"(三次多項(xiàng)式插值) ]
- 將每?jī)蓚€(gè)相鄰的節(jié)點(diǎn)用直線連接起來钞螟,如此形成的一條折線就是分段線性插值函數(shù)。每一個(gè)小段都確定一個(gè)函數(shù)表達(dá)式扶供,疊加起來作為最終的表達(dá)式筛圆。
不進(jìn)行分段時(shí)裂明,插值點(diǎn)越多椿浓,最終函數(shù)的次數(shù)越高,而高次多項(xiàng)式會(huì)在插值的區(qū)間內(nèi)發(fā)生嚴(yán)重的震蕩現(xiàn)象——“龍格現(xiàn)象”闽晦。因此更傾向于使用分段低次多項(xiàng)式來近似原函數(shù)扳碍。
x = 0:2*pi; %生成[0,2*pi]之間的整數(shù)值
y = sin(x); %生成相應(yīng)的函數(shù)值
plot(x,y,"or");%繪制一下點(diǎn)
xx = 0:0.01:2*pi;%這個(gè)是查詢點(diǎn)的坐標(biāo)向量
yy = interp1(x,y,xx,'linear'); %yy就是查詢點(diǎn)向量對(duì)應(yīng)的函數(shù)值向量了
plot(x,y,"o",xx,yy,"r");
xx=1.23;%只查詢一個(gè)元素也是可以的
yy = interp1(x,y,xx,'linear');
plot(x,y,"o",xx,yy,"r");
-
分段三次Hermite(埃爾米特)插值
不僅要求插值函數(shù)過相應(yīng)的已知點(diǎn),還要求函數(shù)曲線在已知點(diǎn)處一階導(dǎo)數(shù)值等于原函數(shù)的導(dǎo)數(shù)值仙蛉,這也是為什么三次埃爾米特在已知點(diǎn)處更為平滑笋敞,且與原曲線更為相近。
使用三次多項(xiàng)式作為每一個(gè)小段的插值多項(xiàng)式荠瘪,相對(duì)于線性函數(shù)夯巷,三次多項(xiàng)式更為平滑赛惩。
p = pchip(x,y,newx) %在MATLAB中至少需要4個(gè)點(diǎn)
interp1(x,y,xx,'pchip')
三次樣條插值
所謂樣條曲線,就是把一根具有彈性的細(xì)長(zhǎng)木條(樣條)在幾個(gè)樣點(diǎn)處用壓鐵壓住趁餐,其余位置自由彎曲喷兼。這樣子,由樣條形成的曲線就稱之為樣條曲線后雷。樣條曲線實(shí)際上是由分段三次曲線連接而成季惯,且在連接點(diǎn)處具有連續(xù)的二階導(dǎo)數(shù),從數(shù)學(xué)上加以概括就得到三次樣條的概念臀突。
以上這些等式條件勉抓,提供了4n-2個(gè)方程,但如果我們需要4n個(gè)三次多項(xiàng)式候学,就需要解出4n個(gè)未知數(shù)藕筋,也就是需要4n個(gè)方程。剩下的兩個(gè)方程盒齿,我們稱之為邊界條件念逞。
如果存在邊界條件,則我們使用csape
函數(shù)進(jìn)行三次樣條插值边翁。
pp = csape(x,y)
可以看到翎承,三次樣條插值最接近原曲線,分段線性插值與原曲線相差最遠(yuǎn)符匾。在實(shí)際使用中叨咖,三次樣條插值函數(shù)也比較多。
此外啊胶,還有n維數(shù)據(jù)插值甸各,使用到的函數(shù)是interpn
temps = [82,81,80,82,84;79,63,61,65,87;84,84,82,85,86];
mesh(temps) % 根據(jù)原始數(shù)據(jù)繪出溫度分布圖,可看此圖粗糙度
width = 1:5;depth = 1:3;
di = 1:0.2:3;wi = 1:0.2:5;
[WI,DI] = meshgrid(wi,di); %增加了節(jié)點(diǎn)數(shù)目
ZI = interp2(width,depth,temps,WI,DI,"cubic"); %三階插值
surfc(WI,DI,ZI)
問題
:(1)給出估計(jì)任意時(shí)刻的排沙量及總排沙量的方法(2)確定排沙量與水流量的關(guān)系
視頻講解
`思路':排沙量 = 水流量×含沙量
已知給定觀測(cè)時(shí)刻是等間距的焰坪,那么各次觀測(cè)時(shí)刻(離開始時(shí)刻6月29日零時(shí))分別為`t = 3600(12i - 4)趣倾,i = 1,2,...,24
記第i次觀測(cè)時(shí)水流量為vi,含沙量為ci某饰,則含沙量yi = vi×ci
考慮到實(shí)際中的排沙量應(yīng)該是時(shí)間的連續(xù)函數(shù)儒恋,為提高模型精度,采用三次樣條函數(shù)進(jìn)行插值黔漂。
求出y = y(t)與時(shí)間的關(guān)系诫尽,進(jìn)行積分,就可以得到總的排沙量
對(duì)于問題(2),研究排沙量與水流量的關(guān)系,從試驗(yàn)數(shù)據(jù)可以看出,開始排沙量是隨著水流量的增加而增長(zhǎng),而后是隨著水流量的減少而減少炬守。顯然,變化規(guī)律并非是線性的關(guān)系,為此,把問題分為兩部分,從開始水流量增加到最大值 2720m/s(即增長(zhǎng)的過程)為第一階段,從水流量的最大值到結(jié)束為第二階段,分別來研究水流量與排沙量的關(guān)系牧嫉。
曲線擬合
擬合類似于插值,都是函數(shù)逼近的一種手段。區(qū)別在于酣藻,插值函數(shù)必須經(jīng)過所有已知點(diǎn)曹洽,而擬合得到的函數(shù),只需要滿足在某種意義下辽剧,已知點(diǎn)與該函數(shù)曲線的“誤差”最小衣洁。
也就是說,擬合是在平面上找到一條連續(xù)的曲線抖仅,使得所有已知點(diǎn)到這條曲線的總距離最小坊夫。這樣我們就有理由使用這條曲線來近似原函數(shù)曲線了。
-
一元線性擬合
找到一條直線y= kx+b
使得所有的已知點(diǎn)與該直線的總距離最小撤卢,也就是總偏差最小环凿。
衡量標(biāo)準(zhǔn)——最小二乘法
非線性函數(shù)的線性化
因此在函數(shù)擬合前一定要先進(jìn)行作圖(散點(diǎn)圖)
從散點(diǎn)圖可以看出,第一階段基本上是線性關(guān)系。第一階段和第二階段都準(zhǔn)備用一次和二次曲線來擬合,哪一個(gè)模型的剩余標(biāo)準(zhǔn)差小就選取哪一個(gè)模型放吩。
最終結(jié)果
% 一: y=250.5655v-373384.4661
% 二: y=0.167v*2-180.4668v+72421.0982
其他解法: 黃河小浪底調(diào)水調(diào)沙灰色數(shù)學(xué)研究
- 評(píng)價(jià)擬合效果
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浮點(diǎn)數(shù)計(jì)算的一個(gè)誤差
R_2 = SSR / SST
- matlab擬合工具箱
Curve Fitting
在命令行輸出“cftool”
擬合也存在著一個(gè)典型的問題智听,即過擬合現(xiàn)象。如果你的參數(shù)個(gè)數(shù)要比變量的個(gè)數(shù)還要多渡紫,那么在具體擬合的時(shí)候到推,很可能會(huì)得到很小的SSE。單從擬合的角度而言是沒問題的惕澎,但是這種過擬合莉测,可能無法合理地解釋實(shí)際問題,因此在擬合的時(shí)候需要注意過擬合的問題唧喉。其實(shí)插值捣卤,例如拉格朗日插值這種可以得到一個(gè)單一函數(shù)的插值方法,我們就可以將它理解為過擬合八孝。雖然它的SSE=0董朝,已經(jīng)達(dá)到了最好,但無論是用來預(yù)測(cè)未來干跛,還是用來解釋現(xiàn)象子姜,插值函數(shù)都不是一個(gè)很好的選擇。
2. 數(shù)值積分
3. 優(yōu)化問題
線性規(guī)劃有約束極小問題
非線性規(guī)劃有約束極小問題
非線性無約束極小問題
非線性最小二乘問題
二次規(guī)劃