學(xué)原理到MATLAB/Python實戰(zhàn)應(yīng)用)
1. 從“猜數(shù)”到“造數(shù)”為什么我們需要插值與擬合最近在B站上跟著清風(fēng)老師的數(shù)學(xué)建模課程學(xué)習(xí)發(fā)現(xiàn)很多同學(xué)在接觸到“插值”和“擬合”這兩個概念時第一反應(yīng)是這不都是找條線把點連起來嗎有什么區(qū)別我剛開始學(xué)的時候也有這個困惑直到在實際項目中踩了幾個坑才真正體會到它們背后完全不同的邏輯和應(yīng)用場景。簡單來說插值是在“猜數(shù)”而擬合是在“找規(guī)律”。這聽起來有點抽象我舉個生活中的例子。假設(shè)你手頭有一份某城市過去5年每年1月1日中午的氣溫記錄[10℃ 12℃ 9℃ 11℃ ]?,F(xiàn)在你想知道第5年1月1日的氣溫那個“”但你恰好丟失了這份數(shù)據(jù)。這時你根據(jù)前4年的數(shù)據(jù)推測第5年可能是10.5℃。這個“推測”的過程就很像插值——你構(gòu)造了一個函數(shù)比如一條平滑的曲線讓它必須精確地穿過所有已知的數(shù)據(jù)點前4年的溫度然后利用這個函數(shù)去計算未知點的值。插值的結(jié)果在已知點上是完全準(zhǔn)確的它回答的問題是“在已知數(shù)據(jù)點之間或附近未知點的值最可能是什么”那擬合呢還是這個例子現(xiàn)在你手頭有過去5年每個月15號的氣溫數(shù)據(jù)總共60個點。你發(fā)現(xiàn)這些點大致呈一條波浪線夏天高冬天低。你想找出一個公式能大致描述氣溫隨時間變化的整體趨勢而不是精確復(fù)現(xiàn)每一天的具體溫度。這個公式畫出來的線可能不會穿過任何一個原始數(shù)據(jù)點但它抓住了數(shù)據(jù)背后的周期性規(guī)律。這就是擬合——它承認(rèn)數(shù)據(jù)有誤差測量誤差、隨機波動目標(biāo)是找到一個最“貼近”所有數(shù)據(jù)點的函數(shù)來描述其內(nèi)在的規(guī)律或關(guān)系。它回答的問題是“這些數(shù)據(jù)背后隱藏著什么樣的整體趨勢或數(shù)學(xué)模型”在數(shù)學(xué)建模競賽和實際科研中這兩種算法是處理“不完美數(shù)據(jù)”的利器。插值常用于補全缺失數(shù)據(jù)、加密采樣點比如將粗糙的地形圖變精細(xì)、函數(shù)逼近計算。擬合則是發(fā)現(xiàn)變量間關(guān)系、進(jìn)行預(yù)測預(yù)報、參數(shù)估計的核心工具。理解它們的區(qū)別是正確選用它們的第一步。接下來我們就深入這兩種算法的“五臟六腑”看看它們具體是怎么工作的以及在實際用的時候有哪些教科書上不會寫的門道。2. 插值算法在已知點之間“架橋”的藝術(shù)插值的核心思想非常直觀已知平面上一系列互不相同的點 $(x_i, y_i), i0,1,...,n$要構(gòu)造一個光滑的函數(shù)曲線 $y f(x)$使其滿足 $f(x_i) y_i$。這個 $f(x)$ 就稱為插值函數(shù)。聽起來簡單但“光滑”和“準(zhǔn)確”之間如何權(quán)衡選用什么樣的函數(shù)形式里面大有學(xué)問。2.1 從最簡單到最常用幾種基礎(chǔ)插值方法剖析2.1.1 最近鄰插值最快的“偷懶”方法最近鄰插值的邏輯最簡單未知點 $x$ 的值等于離它最近的已知點 $x_i$ 的值。用公式寫就是 $f(x) y_j$其中 $j \arg\min_i |x - x_i|$。注意最近鄰插值生成的結(jié)果曲線是階梯狀的完全不光滑。它只適用于對連續(xù)性要求極低、追求最快速度的場景比如圖像的快速放大會出現(xiàn)馬賽克。在科學(xué)計算和建模中除非萬不得已否則不要用它來處理數(shù)值數(shù)據(jù)。2.1.2 線性插值在兩點間連直線這是最直觀的插值方法。對于區(qū)間 $[x_k, x_{k1}]$ 內(nèi)的點 $x$它的值由左右兩個已知點決定 $$ f(x) y_k \frac{y_{k1} - y_k}{x_{k1} - x_k} (x - x_k) $$ 它的幾何意義就是在相鄰兩點間連一條線段。優(yōu)點計算量小結(jié)果不會超出數(shù)據(jù)范圍不會過沖或下沖。缺點在節(jié)點處已知點導(dǎo)數(shù)不連續(xù)曲線會有“尖角”不夠光滑。對于描述物理過程如物體運動軌跡來說這種突然的轉(zhuǎn)折往往不符合實際。2.1.3 拉格朗日插值一個優(yōu)美的理論公式拉格朗日插值給出了一種直接構(gòu)造通過所有 $n1$ 個點的 $n$ 次多項式的通用方法 $$ L_n(x) \sum_{i0}^{n} y_i l_i(x) $$ 其中 $l_i(x)$ 是拉格朗日基多項式 $$ l_i(x) \prod_{\substack{j0 \ j \neq i}}^{n} \frac{x - x_j}{x_i - x_j} $$ 這個公式非常對稱優(yōu)美理論上可以精確穿過所有點。實操心得拉格朗日插值法千萬不要用于高次插值比如超過7、8個點。這是初學(xué)者最容易踩的坑。高次多項式具有強烈的龍格現(xiàn)象在區(qū)間邊緣會產(chǎn)生劇烈的震蕩完全偏離真實函數(shù)。此外每增加一個點所有基多項式都要重新計算效率很低。它的主要價值在于理論推導(dǎo)實際計算中多用它的另一種等價形式——牛頓插值法后者具有“承襲性”增加新點時計算更高效。2.1.4 分段低次插值實用主義的勝利為了克服高次插值的震蕩問題最實用的思路就是“分段處理”將整個區(qū)間分成若干小段在每一段上用低次多項式最常用的是三次進(jìn)行插值。這樣既能保證整體曲線的光滑性又能避免全局震蕩。三次樣條插值就是這一思想的杰出代表。2.2 三次樣條插值為何它是“工業(yè)標(biāo)準(zhǔn)”三次樣條插值要求分段的三次多項式 $S_i(x)$ 在區(qū)間 $[x_i, x_{i1}]$ 上滿足$S_i(x_i) y_i$ $S_i(x_{i1}) y_{i1}$。穿過節(jié)點$S_i(x_{i1}) S_{i1}(x_{i1})$ $S_i(x_{i1}) S_{i1}(x_{i1})$。在節(jié)點處一階、二階導(dǎo)數(shù)連續(xù)還需要兩個邊界條件通常指定一階導(dǎo)或二階導(dǎo)在兩端點的值自然樣條是令兩端二階導(dǎo)為0。滿足這些條件后拼接起來的曲線不僅函數(shù)值連續(xù)連速度和加速度一階、二階導(dǎo)數(shù)的物理意義都是連續(xù)的這就得到了視覺上和物理上都極其光滑的曲線。為什么是“三次”二次多項式無法同時保證函數(shù)值、一階導(dǎo)、二階導(dǎo)在節(jié)點處連續(xù)。三次是滿足“C2連續(xù)”函數(shù)值、一階導(dǎo)、二階導(dǎo)均連續(xù)的最低次數(shù)計算復(fù)雜度和光滑度達(dá)到了最佳平衡。實操步驟以MATLAB為例% 假設(shè)已知數(shù)據(jù)點 x [0, 1, 2, 3, 4, 5]; y [0, 0.8, 0.9, 0.1, -0.8, -1]; % 進(jìn)行三次樣條插值 xx linspace(0, 5, 100); % 生成更密的插值點 yy spline(x, y, xx); % 使用spline函數(shù) % 繪圖對比 plot(x, y, o, xx, yy, -) legend(原始數(shù)據(jù), 三次樣條插值曲線)避坑指南數(shù)據(jù)單調(diào)性如果原始數(shù)據(jù)是單調(diào)的普通三次樣條插值結(jié)果不一定保持單調(diào)。這在某些場景下如插補隨時間遞增的庫存數(shù)據(jù)會導(dǎo)致不符合常識的結(jié)果。此時需要使用“保形樣條”或“單調(diào)樣條”。邊界條件選擇spline函數(shù)默認(rèn)使用“非節(jié)點邊界條件”。如果你知道數(shù)據(jù)兩端的變化趨勢例如物理模型要求端點導(dǎo)數(shù)為零應(yīng)使用csape函數(shù)并指定邊界條件。外推風(fēng)險插值只適用于數(shù)據(jù)范圍內(nèi)部。用樣條函數(shù)去預(yù)測范圍外的值外推風(fēng)險極高結(jié)果通常不可信。2.3 Hermite插值當(dāng)你知道“變化趨勢”時有些情況下我們不僅知道點的位置 $(x_i, y_i)$還知道該點的變化率一階導(dǎo)數(shù)$y_i$。例如在軌跡規(guī)劃中我們既規(guī)定物體某個時間點應(yīng)在某個位置也規(guī)定它在該時刻的速度。Hermite插值就是解決這類問題的構(gòu)造一個多項式使其在節(jié)點處滿足給定的函數(shù)值和導(dǎo)數(shù)值。兩點三次Hermite插值這是最常用的形式。給定區(qū)間 $[x_0, x_1]$ 兩端的函數(shù)值和導(dǎo)數(shù)值$(x_0, y_0, y_0)$ 和 $(x_1, y_1, y_1)$可以唯一確定一個三次多項式。與樣條的區(qū)別樣條插值的數(shù)據(jù)點導(dǎo)數(shù)是未知的是通過“光滑性”條件求解出來的。而Hermite插值的導(dǎo)數(shù)是指定的已知條件??梢哉fHermite插值給了我們更強的控制力。2.4 克里金空間插值從“點”到“場”的升維思考克里金插值最近在氣象、地質(zhì)、環(huán)境科學(xué)等領(lǐng)域非常熱。它本質(zhì)上是一種用于空間數(shù)據(jù)統(tǒng)計最優(yōu)插值的方法。與前面所述的確定性插值方法不同克里金是一種地統(tǒng)計學(xué)方法它認(rèn)為空間數(shù)據(jù)具有相關(guān)性且這種相關(guān)性隨距離變化。它的核心思想包含兩部分空間自相關(guān)距離越近的點其屬性值越相似。無偏最優(yōu)估計估計值 $\hat{Z}(x_0)$ 是周圍已知點 $Z(x_i)$ 的線性加權(quán)和$\hat{Z}(x_0) \sum_{i1}^{n} \lambda_i Z(x_i)$。權(quán)重 $\lambda_i$ 不是根據(jù)距離簡單反比確定而是通過一個變差函數(shù)模型來計算以確保估計是無偏的期望誤差為零且估計方差最小。為什么在數(shù)學(xué)建模中值得關(guān)注當(dāng)你處理的地理數(shù)據(jù)如降雨量、礦產(chǎn)品位、土壤污染濃度不僅是一個個孤立的點而且其空間分布存在明顯的趨勢或結(jié)構(gòu)性變化時簡單反距離加權(quán)插值會抹平這種結(jié)構(gòu)??死锝鸩逯的芡ㄟ^變差函數(shù)捕捉數(shù)據(jù)的空間結(jié)構(gòu)如各向異性并提供插值結(jié)果的不確定性克里金方差告訴你哪些區(qū)域的預(yù)測更可靠。一個簡化的工作流程數(shù)據(jù)探索與預(yù)處理檢查數(shù)據(jù)分布處理異常值。構(gòu)建經(jīng)驗變差函數(shù)計算所有點對在不同距離段上的半方差。擬合理論變差函數(shù)模型用球狀模型、指數(shù)模型、高斯模型等去擬合經(jīng)驗變差函數(shù)。求解克里金權(quán)重基于理論變差函數(shù)模型構(gòu)建并求解克里金方程組得到權(quán)重 $\lambda_i$。插值計算與繪圖對目標(biāo)區(qū)域網(wǎng)格點進(jìn)行插值并繪制結(jié)果圖和方差圖。3. 擬合算法在噪聲中尋找“真相”的妥協(xié)擬合承認(rèn)一個殘酷的現(xiàn)實我們的觀測數(shù)據(jù) $y_i$ 與理論值 $f(x_i, \beta)$ 之間總存在誤差 $\epsilon_i$即 $y_i f(x_i, \beta) \epsilon_i$。這里 $\beta$ 是模型參數(shù)。擬合的目標(biāo)不是讓曲線穿過所有點而是找到一組參數(shù) $\beta$使得誤差 $\epsilon_i$ 在整體上最小。這個“整體上最小”的標(biāo)準(zhǔn)最常用的就是最小二乘法讓殘差平方和 $RSS \sum_{i1}^{n} [y_i - f(x_i, \beta)]^2$ 達(dá)到最小。3.1 線性最小二乘法一切的起點當(dāng)擬合函數(shù) $f(x, \beta)$ 是參數(shù) $\beta$ 的線性函數(shù)時就是線性最小二乘問題。最常見的就是直線擬合$y \beta_0 \beta_1 x$ 和多項式擬合$y \beta_0 \beta_1 x \beta_2 x^2 ... \beta_m x^m$。解法這是一個凸優(yōu)化問題可以通過求導(dǎo)令梯度為零得到正規(guī)方程組$(X^T X) \beta X^T Y$其中 $X$ 是設(shè)計矩陣。求解這個線性方程組即可得到參數(shù) $\beta$。MATLAB/Python實操% MATLAB 多項式擬合 x [1, 2, 3, 4, 5, 6]; y [2.1, 3.9, 6.2, 8.1, 10.5, 12.3]; p polyfit(x, y, 1); % 1次多項式即直線擬合 % p(1)是斜率 p(2)是截距 y_fit polyval(p, x); plot(x, y, o, x, y_fit, r-);# Python (NumPy/Polyfit) import numpy as np x np.array([1, 2, 3, 4, 5, 6]) y np.array([2.1, 3.9, 6.2, 8.1, 10.5, 12.3]) p np.polyfit(x, y, 1) # 1次多項式擬合 y_fit np.polyval(p, x)關(guān)鍵解讀$R^2$ 與過擬合決定系數(shù) $R^2$它衡量了模型對數(shù)據(jù)波動的解釋能力$R^2 1 - \frac{RSS}{TSS}$其中 $TSS$ 是數(shù)據(jù)的總平方和。$R^2$ 越接近1擬合越好。但切記$R^2$ 會隨著多項式次數(shù)增加而單調(diào)增加即使加入無關(guān)變量。過擬合陷阱為了提高 $R^2$不斷增加多項式次數(shù)最終可以得到一個 $n-1$ 次多項式完美穿過所有 $n$ 個點此時 $R^21$。但這毫無意義因為模型完全“記住”了噪聲失去了預(yù)測新數(shù)據(jù)的能力。在建模中模型復(fù)雜度次數(shù)必須與數(shù)據(jù)量和物理背景相匹配。3.2 非線性最小二乘當(dāng)關(guān)系不是直線時現(xiàn)實中更多關(guān)系是非線性的如指數(shù)衰減 $y a e^{bx}$、飽和增長 $y \frac{a x}{b x}$ 等。此時問題變?yōu)榉蔷€性最小二乘$\min \sum [y_i - f(x_i, \beta)]^2$其中 $f$ 關(guān)于參數(shù) $\beta$ 非線性。求解方法無法直接求解析解需迭代求解。常用方法有高斯-牛頓法對 $f$ 在當(dāng)前參數(shù)估計處進(jìn)行一階泰勒展開將非線性問題轉(zhuǎn)化為一系列線性最小二乘問題迭代求解。要求初始值不能離真值太遠(yuǎn)。列文伯格-馬夸爾特法高斯-牛頓法的改進(jìn)版通過引入阻尼因子在梯度下降和高斯-牛頓法之間自適應(yīng)切換更魯棒是MATLAB中l(wèi)sqcurvefit和lsqnonlin函數(shù)的默認(rèn)算法。實操步驟與心得模型選擇是前提先通過散點圖觀察數(shù)據(jù)趨勢結(jié)合學(xué)科知識猜測可能的函數(shù)形式。是增長飽和型還是指數(shù)衰減型參數(shù)初始值至關(guān)重要非線性擬合的成敗很大程度上取決于初始值。可以嘗試通過線性化變換估算如對 $y a e^{bx}$ 取對數(shù)得 $\ln y \ln a bx$先擬合 $\ln y$ 和 $x$ 的線性關(guān)系得到初始 $a, b$。根據(jù)數(shù)據(jù)范圍和生活經(jīng)驗給一個合理的猜測。使用工具% MATLAB 非線性擬合示例 (指數(shù)模型) xdata linspace(0, 5, 50); ydata 2.5 * exp(-0.8*xdata) 0.1*randn(size(xdata)); % 帶噪聲的指數(shù)數(shù)據(jù) % 定義模型函數(shù) modelfun (b, x) b(1) * exp(b(2) * x); % 給出初始猜測 [a, b] beta0 [3, -0.5]; % 使用 lsqcurvefit beta_fit lsqcurvefit(modelfun, beta0, xdata, ydata); % 計算擬合值 yfit modelfun(beta_fit, xdata);3.3 水文地貌約束擬合算法當(dāng)擬合需要“常識”這是擬合思想的一個高級演進(jìn)。在擬合河流剖面、地形表面時純粹基于數(shù)學(xué)的最小二乘可能產(chǎn)生不符合地理學(xué)常識的結(jié)果比如擬合出的河床高程出現(xiàn)不合理的震蕩或反向坡度。水文地貌約束擬合就是在最小二乘的目標(biāo)函數(shù)中加入懲罰項將地理學(xué)先驗知識作為約束條件。例如單調(diào)性約束河流高程沿流向應(yīng)單調(diào)遞減。凹凸性約束地形剖面在特定地段應(yīng)保持凸或凹。平滑性約束避免過度起伏可通過懲罰二階導(dǎo)數(shù)來實現(xiàn)。此時的優(yōu)化問題變?yōu)?\min \left{ \sum [y_i - f(x_i)]^2 \lambda \cdot R(f) \right}$。其中 $R(f)$ 是正則化項體現(xiàn)了對解 $f$ 的約束如平滑度$\lambda$ 是權(quán)衡數(shù)據(jù)擬合程度和解性質(zhì)的正則化參數(shù)。建模啟示這告訴我們一個優(yōu)秀的擬合模型不應(yīng)只追求數(shù)學(xué)上的殘差最小更要融入領(lǐng)域知識。在數(shù)學(xué)建模比賽中如果能將問題背景知識轉(zhuǎn)化為合理的數(shù)學(xué)模型約束將是極大的加分項。4. 插值與擬合的抉擇場景、陷阱與實戰(zhàn)策略學(xué)完了方法最關(guān)鍵的一步是如何選擇。這里沒有銀彈只有基于場景的權(quán)衡。4.1 核心區(qū)別與選用流程圖我們可以從以下幾個維度對比特性維度插值擬合目標(biāo)精確還原已知點推測未知點值尋找數(shù)據(jù)背后的整體趨勢或函數(shù)關(guān)系對數(shù)據(jù)態(tài)度認(rèn)為數(shù)據(jù)精確無誤承認(rèn)數(shù)據(jù)存在觀測誤差或噪聲曲線要求必須穿過所有已知數(shù)據(jù)點無需穿過任何數(shù)據(jù)點追求整體接近結(jié)果得到一個具體的函數(shù)可計算區(qū)間內(nèi)任意點值得到一個帶參數(shù)的模型可用于解釋和預(yù)測典型應(yīng)用補全缺失數(shù)據(jù)、圖像縮放、CAD造型經(jīng)驗公式推導(dǎo)、趨勢預(yù)測、參數(shù)估計一個簡單的決策流程可以這樣數(shù)據(jù)是否精確無誤如果是實驗測量、統(tǒng)計調(diào)查數(shù)據(jù)必然有誤差首選擬合。是否需要精確重現(xiàn)每個已知點如數(shù)字信號處理、幾何造型選插值。已知點是否非常稀疏稀疏時插值不確定性極大更適合用簡單擬合描述趨勢。是否要進(jìn)行外推預(yù)測兩者都需極度謹(jǐn)慎但擬合模型若基于物理定律外推可能比插值更合理。4.2 數(shù)學(xué)建模中的經(jīng)典應(yīng)用場景與代碼片段場景一數(shù)據(jù)補全與加密插值問題某氣象站每6小時記錄一次溫度需要估計每小時的溫度變化。方案用三次樣條插值。樣條能保證溫度變化曲線的光滑性溫度不會突變。import numpy as np from scipy import interpolate import matplotlib.pyplot as plt # 原始稀疏數(shù)據(jù) (每6小時) x_coarse np.array([0, 6, 12, 18, 24]) y_temp np.array([15, 20, 25, 19, 16]) # 創(chuàng)建樣條插值函數(shù) cs interpolate.CubicSpline(x_coarse, y_temp, bc_typenatural) # 自然邊界條件 # 生成加密數(shù)據(jù) (每小時) x_dense np.linspace(0, 24, 100) y_dense cs(x_dense) plt.plot(x_coarse, y_temp, o, label原始數(shù)據(jù)) plt.plot(x_dense, y_dense, -, label樣條插值) plt.legend() plt.show()場景二經(jīng)驗公式發(fā)現(xiàn)擬合問題通過實驗測得不同濃度下的反應(yīng)速率尋找反應(yīng)速率與濃度的關(guān)系式。方案先畫散點圖觀察趨勢類似冪函數(shù) $y a x^b$。采用非線性最小二乘擬合。% 假設(shè)數(shù)據(jù) conc [0.1, 0.5, 1, 2, 5]; % 濃度 rate [0.05, 0.45, 1.1, 3.8, 18.5]; % 反應(yīng)速率 % 定義冪函數(shù)模型 modelfun (b, x) b(1) * x.^b(2); beta0 [1, 2]; % 初始猜測 % 擬合 beta_fit lsqcurvefit(modelfun, beta0, conc, rate); fprintf(擬合公式: 速率 %.2f * 濃度^{%.2f}\n, beta_fit(1), beta_fit(2)); % 繪制對比 conc_fine linspace(0.1, 5, 100); rate_fit modelfun(beta_fit, conc_fine); plot(conc, rate, o, conc_fine, rate_fit, r-);場景三帶約束的曲線繪制擬合約束問題擬合一條消費隨收入變化的曲線已知消費必須為正且增長逐漸放緩邊際消費傾向遞減。方案可以選用對數(shù)函數(shù)或帶參數(shù)限制的冪函數(shù)進(jìn)行擬合并在優(yōu)化時設(shè)置參數(shù)的下界如大于0或直接使用如fit函數(shù)中的power1等內(nèi)置約束模型。4.3 那些容易踩的坑與自查清單插值外推的災(zāi)難絕對不要輕易使用插值函數(shù)計算數(shù)據(jù)范圍之外的值。外推行為等同于假設(shè)你的插值模型在未知區(qū)域依然成立這通常毫無根據(jù)。過擬合的迷惑擬合時$R^2$ 不是越高越好。將數(shù)據(jù)隨機分成訓(xùn)練集和測試集用訓(xùn)練集擬合用測試集計算預(yù)測誤差是檢驗?zāi)P褪欠襁^擬合的金標(biāo)準(zhǔn)。量綱與尺度陷阱在擬合前特別是多變量擬合時檢查一下自變量的量級。如果 $x$ 的范圍是 $[0, 1000]$而 $x^2$ 的范圍是 $[0, 10^6]$這可能導(dǎo)致數(shù)值計算問題矩陣病態(tài)??紤]對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化或中心化處理。異常值的致命影響最小二乘法對異常值非常敏感一個離群點可能把整個擬合線“拉偏”。在擬合前務(wù)必通過可視化如箱線圖、散點圖檢查并處理異常值??梢钥紤]使用穩(wěn)健回歸方法。模型誤選的南轅北轍數(shù)據(jù)呈現(xiàn)明顯的對數(shù)增長你卻用線性模型去擬合結(jié)果必然很差??梢暬堑谝灰獎?wù)先畫圖再根據(jù)圖形趨勢和學(xué)科知識選擇候選模型。忽略殘差分析擬合完成后一定要繪制殘差圖殘差 vs. 自變量或擬合值。如果殘差隨機均勻分布在0附近說明模型基本合適。如果殘差呈現(xiàn)明顯的趨勢如喇叭形、曲線形則說明模型函數(shù)形式選擇不當(dāng)或存在異方差性。5. 從理論到競賽在數(shù)學(xué)建模中活用插值與擬合在三天三夜的數(shù)學(xué)建模競賽中插值和擬合往往是解決實際問題的“腳手架”和“放大器”它們很少作為最終答案但卻是通往答案的必經(jīng)之路。5.1 如何將問題轉(zhuǎn)化為插值/擬合模型拿到一個賽題可以問自己以下幾個問題問題中是否有“缺失數(shù)據(jù)”需要補全例如已知少數(shù)幾個氣象站的污染數(shù)據(jù)需要繪制整個區(qū)域的污染分布圖。這指向空間插值如克里金。問題是否要求從離散觀測數(shù)據(jù)中找到一個連續(xù)的描述關(guān)系例如通過實驗測量得到不同條件下一組離散的“投入-產(chǎn)出”數(shù)據(jù)需要建立一個公式來預(yù)測新投入下的產(chǎn)出。這指向曲線擬合。問題中是否有“變化率”或“邊界條件”的信息例如已知物體運動路徑上幾個點的位置和速度。這指向Hermite插值。問題的背景知識是否對曲線的形狀有約束例如擬合經(jīng)濟增長曲線已知其長期增長率不會為負(fù)。這指向帶約束的擬合。5.2 論文寫作中的表述要點在論文的“模型建立”部分不要只寫“我們采用了三次樣條插值”而要寫出為什么交代必要性“由于觀測數(shù)據(jù)在時間上不連續(xù)為了分析其連續(xù)變化特征需要構(gòu)造一個連續(xù)函數(shù)??紤]到物理過程的平滑性我們采用能保證二階導(dǎo)數(shù)連續(xù)的三次樣條插值方法?!泵枋鲞^程“以時間 $t$ 為自變量觀測值 $y$ 為因變量在已知數(shù)據(jù)點 $(t_i, y_i)$ 上構(gòu)造三次樣條函數(shù) $S(t)$。該函數(shù)滿足 $S(t_i)y_i$且在節(jié)點處一階、二階導(dǎo)數(shù)連續(xù)。我們采用自然邊界條件即 $S(t_0)S(t_n)0$?!苯o出結(jié)果“插值后我們得到了連續(xù)的函數(shù) $S(t)$其曲線如圖3所示?;诖宋覀兛梢杂嬎愠鋈我鈺r刻 $t$ 的估計值?!睂τ跀M合更要突出模型選擇和檢驗“散點圖顯示變量 $X$ 與 $Y$ 呈明顯的非線性關(guān)系初步嘗試指數(shù)、對數(shù)、冪函數(shù)等多種形式進(jìn)行擬合。通過比較殘差平方和與殘差圖發(fā)現(xiàn)冪函數(shù) $Y aX^b$ 的殘差分布最為隨機且決定系數(shù) $R^2$ 達(dá)到0.98。”“為驗證模型是否過擬合我們將數(shù)據(jù)隨機分為70%的訓(xùn)練集和30%的測試集。模型在訓(xùn)練集上的 $R^2$ 為0.981在測試集上的 $R^2$ 為0.976兩者接近表明模型具有良好的泛化能力?!?.3 常用工具鏈與資源推薦MATLAB插值 (interp1,spline,pchip,griddata) 擬合 (polyfit,fit,lsqcurvefit,nlinfit)。內(nèi)置工具豐富文檔齊全。Python (SciPy/NumPy)插值scipy.interpolate子模塊interp1d,CubicSpline,griddata。擬合numpy.polyfit多項式scipy.optimize.curve_fit非線性最小二乘scipy.stats.linregress線性回歸??梢暬痬atplotlib是必備。專業(yè)軟件/庫對于克里金插值可研究PyKrige(Python庫) 或GSlib、Surfer等地學(xué)專業(yè)軟件。我個人在多次建模和實際項目中的體會是插值和擬合的代碼實現(xiàn)并不難真正的功夫在前期理解你的數(shù)據(jù)、明確你的目標(biāo)、選擇合適的模型。在按下“運行”鍵之前多花時間畫圖、思考、查閱文獻(xiàn)往往能事半功倍。最后再分享一個小心得對于任何擬合結(jié)果一定要問自己一句——“這個模型從物理/經(jīng)濟/生物意義上講說得通嗎” 數(shù)學(xué)上的優(yōu)美必須服務(wù)于現(xiàn)實世界的邏輯。