一. 曲線插值和擬合
數(shù)模比賽中,常常需要根據(jù)已知的函數(shù)點進行數(shù)據(jù)、模型的處理和分析,而有時候現(xiàn)有的數(shù)據(jù)是極少的,不足以支撐分析的進行,這時就需要使用一些數(shù)學的方法,“模擬產(chǎn)生”一些新的但又比較靠譜的值來滿足需求,這就是插值的作用。
一維插值
對表格給出的函數(shù),求出沒有給出的函數(shù)

y = interp1(x0,y0,x,"method") # 分段線性插值,1是指一維
y = spline(x0,y0,x) # 三次樣條插值
% x0,y0是已知節(jié)點的坐標,同維向量; y對應于x處的插值,同維向量
% method["nearest"(最近鄰),"linear","spline","cubic"(三次多項式插值) ]
- 將每兩個相鄰的節(jié)點用直線連接起來,如此形成的一條折線就是分段線性插值函數(shù)。每一個小段都確定一個函數(shù)表達式,疊加起來作為最終的表達式。
不進行分段時,插值點越多,最終函數(shù)的次數(shù)越高,而高次多項式會在插值的區(qū)間內(nèi)發(fā)生嚴重的震蕩現(xiàn)象——“龍格現(xiàn)象”。因此更傾向于使用分段低次多項式來近似原函數(shù)。
x = 0:2*pi; %生成[0,2*pi]之間的整數(shù)值
y = sin(x); %生成相應的函數(shù)值
plot(x,y,"or");%繪制一下點
xx = 0:0.01:2*pi;%這個是查詢點的坐標向量
yy = interp1(x,y,xx,'linear'); %yy就是查詢點向量對應的函數(shù)值向量了
plot(x,y,"o",xx,yy,"r");
xx=1.23;%只查詢一個元素也是可以的
yy = interp1(x,y,xx,'linear');
plot(x,y,"o",xx,yy,"r");

-
分段三次Hermite(埃爾米特)插值
不僅要求插值函數(shù)過相應的已知點,還要求函數(shù)曲線在已知點處一階導數(shù)值等于原函數(shù)的導數(shù)值,這也是為什么三次埃爾米特在已知點處更為平滑,且與原曲線更為相近。
使用三次多項式作為每一個小段的插值多項式,相對于線性函數(shù),三次多項式更為平滑。
p = pchip(x,y,newx) %在MATLAB中至少需要4個點
interp1(x,y,xx,'pchip')
分段三次Hermite 三次樣條插值
所謂樣條曲線,就是把一根具有彈性的細長木條(樣條)在幾個樣點處用壓鐵壓住,其余位置自由彎曲。這樣子,由樣條形成的曲線就稱之為樣條曲線。樣條曲線實際上是由分段三次曲線連接而成,且在連接點處具有連續(xù)的二階導數(shù),從數(shù)學上加以概括就得到三次樣條的概念。

以上這些等式條件,提供了4n-2個方程,但如果我們需要4n個三次多項式,就需要解出4n個未知數(shù),也就是需要4n個方程。剩下的兩個方程,我們稱之為邊界條件。

如果存在邊界條件,則我們使用csape函數(shù)進行三次樣條插值。
pp = csape(x,y)



可以看到,三次樣條插值最接近原曲線,分段線性插值與原曲線相差最遠。在實際使用中,三次樣條插值函數(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é)點數(shù)目
ZI = interp2(width,depth,temps,WI,DI,"cubic"); %三階插值
surfc(WI,DI,ZI)


問題:(1)給出估計任意時刻的排沙量及總排沙量的方法(2)確定排沙量與水流量的關(guān)系
視頻講解
`思路':排沙量 = 水流量×含沙量
已知給定觀測時刻是等間距的,那么各次觀測時刻(離開始時刻6月29日零時)分別為`t = 3600(12i - 4),i = 1,2,...,24
記第i次觀測時水流量為vi,含沙量為ci,則含沙量yi = vi×ci
考慮到實際中的排沙量應該是時間的連續(xù)函數(shù),為提高模型精度,采用三次樣條函數(shù)進行插值。
求出y = y(t)與時間的關(guān)系,進行積分,就可以得到總的排沙量

對于問題(2),研究排沙量與水流量的關(guān)系,從試驗數(shù)據(jù)可以看出,開始排沙量是隨著水流量的增加而增長,而后是隨著水流量的減少而減少。顯然,變化規(guī)律并非是線性的關(guān)系,為此,把問題分為兩部分,從開始水流量增加到最大值 2720m/s(即增長的過程)為第一階段,從水流量的最大值到結(jié)束為第二階段,分別來研究水流量與排沙量的關(guān)系。
曲線擬合
擬合類似于插值,都是函數(shù)逼近的一種手段。區(qū)別在于,插值函數(shù)必須經(jīng)過所有已知點,而擬合得到的函數(shù),只需要滿足在某種意義下,已知點與該函數(shù)曲線的“誤差”最小。
也就是說,擬合是在平面上找到一條連續(xù)的曲線,使得所有已知點到這條曲線的總距離最小。這樣我們就有理由使用這條曲線來近似原函數(shù)曲線了。
-
一元線性擬合
找到一條直線y= kx+b使得所有的已知點與該直線的總距離最小,也就是總偏差最小。
衡量標準——最小二乘法
公眾號:我是陳小白 非線性函數(shù)的線性化

因此在函數(shù)擬合前一定要先進行作圖(散點圖)

從散點圖可以看出,第一階段基本上是線性關(guān)系。第一階段和第二階段都準備用一次和二次曲線來擬合,哪一個模型的剩余標準差小就選取哪一個模型。


最終結(jié)果
% 一: y=250.5655v-373384.4661
% 二: y=0.167v*2-180.4668v+72421.0982
其他解法: 黃河小浪底調(diào)水調(diào)沙灰色數(shù)學研究
- 評價擬合效果
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
- matlab擬合工具箱
Curve Fitting
在命令行輸出“cftool”
界面
擬合也存在著一個典型的問題,即過擬合現(xiàn)象。如果你的參數(shù)個數(shù)要比變量的個數(shù)還要多,那么在具體擬合的時候,很可能會得到很小的SSE。單從擬合的角度而言是沒問題的,但是這種過擬合,可能無法合理地解釋實際問題,因此在擬合的時候需要注意過擬合的問題。其實插值,例如拉格朗日插值這種可以得到一個單一函數(shù)的插值方法,我們就可以將它理解為過擬合。雖然它的SSE=0,已經(jīng)達到了最好,但無論是用來預測未來,還是用來解釋現(xiàn)象,插值函數(shù)都不是一個很好的選擇。
2. 數(shù)值積分
3. 優(yōu)化問題
線性規(guī)劃有約束極小問題
非線性規(guī)劃有約束極小問題
非線性無約束極小問題
非線性最小二乘問題
二次規(guī)劃


