14. 地下水動(dòng)力學(xué)中用到的最小二乘法

地下水動(dòng)力學(xué)中用到的最小二乘法

歡迎點(diǎn)評(píng)融撞!如果公式亂碼,請(qǐng)用瀏覽器訪問(wèn)粗蔚,用鼠標(biāo)右鍵 -> 加載映像 顯示公式尝偎。

需要安裝的庫(kù):Jupyter,Jupyterlab鹏控,numpy致扯,scipy,matplotlib当辐,ipympl抖僵,mpl_interactions

pip 安裝:

pip install Jupyter Jupyterlab numpy scipy matplotlib ipympl mpl_interactions

以下內(nèi)容源自地下水動(dòng)力學(xué)課程教學(xué)內(nèi)容,程序可在 Jupyter notebook 中運(yùn)行缘揪。

最小二乘法是一種用途非常廣泛的算法耍群,原理簡(jiǎn)單易懂,高等數(shù)學(xué)中有介紹找筝。實(shí)際上蹈垢,諸如多元線性回歸等方法都是依此為基礎(chǔ)。

地下水動(dòng)力學(xué)中多個(gè)知識(shí)模塊都可以用最小二乘法解決袖裕,如 Jacob 井損計(jì)算曹抬,Q\sim s 曲線類(lèi)型確定,Jacob 線性擬合求參急鳄,Theis 公式非線性擬合求參等谤民。

最小二乘法原理

根據(jù)觀測(cè)數(shù)據(jù) \{(x_i, y_i),\ i = 1, 2, \cdots, n\},求擬合直線 y = \alpha + \beta x疾宏,使 E(\alpha, \beta) = \sum_{i=1}^n(\alpha + \beta x_i - y_i)^2 取最小值张足。

\frac{\partial E}{\partial \alpha}=0, \frac{\partial E}{\partial \beta}=0

\left\{ \begin{array}{ll} \sum_{i=1}^n(\alpha+\beta x_i-y_i)&=0\\ \sum_{i=1}^n(\alpha+\beta x_i-y_i)x_i&=0\\ \end{array} \right.

寫(xiě)成矩陣形式灾锯,

A X = b

式中兢榨,

A= \begin{bmatrix} a_{11} & a_{12}\\ a_{21} & a_{22}\\ \end{bmatrix}, X= \begin{bmatrix} \alpha\\ \beta\\ \end{bmatrix}, b= \begin{bmatrix} b_1\\ b_2\\ \end{bmatrix}

其中,a_{11}=n, a_{12}=a_{21}=\sum_{i=1}^nx_i顺饮,a_{22}=\sum_{i=1}^nx_i^2b_1=\sum_{i=1}^ny_i凌那,b_2=\sum_{i=1}^nx_iy_i

解得

\beta=\frac{a_{11}b_2-a_{12}b_1}{a_{11}a_{22}-a_{12}^2},\alpha=\frac{b_1-a_{12}\beta}{a_{11}} \tag{1}

一般形式

考慮超定方程組(超定指未知數(shù)小于方程個(gè)數(shù))

\sum_{j=1}^nx_{ij}\beta_j=y_i,\quad i=1,2,3,\cdots,m

其中兼雄, m 代表樣本數(shù),n 代表參數(shù)維度帽蝶,寫(xiě)成矩陣形式 X\beta=Y

X=\begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1n}\\ x_{21} & x_{22} & \cdots & x_{2n}\\ \vdots & \vdots & & \vdots \\ x_{m1} & x_{m2} & \cdots & x_{mn}\\ \end{bmatrix},\quad \beta=\begin{bmatrix}\beta_1\\\beta_2\\\vdots\\\beta_n\end{bmatrix},\quad Y=\begin{bmatrix}y_1\\y_2\\\vdots\\ y_m\end{bmatrix}

為得到 \beta 的最佳估計(jì) \hat \beta 赦肋,將問(wèn)題轉(zhuǎn)化為如下的最值問(wèn)題:

\min E(\beta)=\min \begin{Vmatrix}X\beta-Y\end{Vmatrix}^2

通過(guò)微分求最值,得

(X^TX)\beta=X^TY \tag{2}

X^TX 為非奇異矩陣,則 \beta 有唯一解佃乘。

\hat\beta=(X^TX)^{-1}X^TY \tag{3}

可以看出囱井,求解最小二乘問(wèn)題的關(guān)鍵是構(gòu)造方程組。numpy 庫(kù)中的 numpy.linalg.solve 可用于求解形如 AX=b 的方程組趣避,numpy.linalg.lstsq 是解超定方程組 X\beta=Y 的最小二乘法程序庞呕。scipy 庫(kù)的 scipy.linalg.lstsq 也是最小二乘法。

算例

一次模擬實(shí)驗(yàn)中程帕,輸入 t(自變量)為

(0.00, 0.30, 0.60, 0.90, 1.08, 1.20, 1.30, 1.48, 1.60, 1.70, 1.78, 1.85, 1.90, 1.95, 2.00)住练,

觀測(cè)到的輸出 y(因變量)為

(1.78, 1.91, 2.01, 2.12, 2.20, 2.22, 2.25, 2.32, 2.38, 2.41, 2.43, 2.47, 2.49, 2.48, 2.51)

根據(jù)實(shí)驗(yàn)分析愁拭,yt 成線性關(guān)系讲逛,試確定關(guān)系表達(dá)式。

以下為 Python 程序岭埠,其中 numpy.array.T將矩陣轉(zhuǎn)置盏混,matplotlib 庫(kù)的 matplotlib.pyplot 模塊用于繪制圖形。

%matplotlib widget

import matplotlib.pyplot as plt
import numpy as np

# 導(dǎo)入 numpy 與 matplotlib 庫(kù)

# 控制小數(shù)的顯示精度
np.set_printoptions(precision=4)

# 將原始數(shù)據(jù)轉(zhuǎn)化為 numpy 的 array 數(shù)組
t = np.array([0.00, 0.30, 0.60, 0.90, 1.08, 1.20, 1.30,
             1.48, 1.60, 1.70, 1.78, 1.85, 1.90, 1.95, 2.00])
y = np.array([1.78, 1.91, 2.01, 2.12, 2.20, 2.22, 2.25,
             2.32, 2.38, 2.41, 2.43, 2.47, 2.49, 2.48, 2.51])

# 形成方程組
X = np.vstack([np.ones(len(t)), t]).T
A = np.dot(X.T, X)
b = np.dot(X.T, y)

按公式(1)計(jì)算:

beta = np.zeros(2)

# 求解方程組
beta[1] = (A[0,0]*b[1] - A[0,1]*b[0]) / (A[0,0]*A[1,1] - A[0,1]*A[0,1])
beta[0] = (b[0] - A[0,1]*beta[1]) / A[0,0]

顯示計(jì)算結(jié)果并繪制圖形

# 顯示計(jì)算結(jié)果與誤差
print("beta =", beta, "residuals =",
      "{:.4f}".format(sum((beta[0] + beta[1]*t - y)**2)))

# 繪制圖形
plt.plot(t, y, "*")
plt.plot(t, beta[0]+beta[1]*t, "-", label="最小二乘法")
plt.xlabel(r"$t$")
plt.ylabel(r"$y$")

plt.legend(
    prop={'family': 'Simsun', 'size': 10}, handlelength=2,
    loc=4, title="圖例",
    title_fontproperties={'family': 'SimHei', 'size': 12})

plt.grid(True)
plt.tight_layout()

fig = plt.gcf()  # 獲取當(dāng)前圖片, 用 fig.savefig("out.png") 保存

plt.show()
image.png

可調(diào)用 np.linalg.solve 求解

# 求解方程組惜论,beta 返回解
beta = np.linalg.solve(A, b)

# 顯示計(jì)算結(jié)果與誤差
print("beta =", beta, "residuals =",
      "{:.4f}".format(sum((beta[0] + beta[1]*t - y)**2)))

也可調(diào)用 np.linalg.lstsq 求解括饶,參數(shù)可參考在線幫助文檔。

# 形成方程組
X = np.vstack([np.ones(len(t)), t]).T

# 調(diào)用 np.linalg.lstsq
beta = np.linalg.lstsq(X, y, rcond=None)

# 顯示計(jì)算結(jié)果與誤差
print("beta =", beta[0], "residuals =", "{:.4f}".format(beta[1][0]))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末来涨,一起剝皮案震驚了整個(gè)濱河市图焰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹦掐,老刑警劉巖技羔,帶你破解...
    沈念sama閱讀 221,548評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異卧抗,居然都是意外死亡藤滥,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)社裆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拙绊,“玉大人,你說(shuō)我怎么就攤上這事泳秀”昊Γ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,990評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵嗜傅,是天一觀的道長(zhǎng)金句。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吕嘀,這世上最難降的妖魔是什么违寞? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,618評(píng)論 1 296
  • 正文 為了忘掉前任贞瞒,我火速辦了婚禮,結(jié)果婚禮上趁曼,老公的妹妹穿的比我還像新娘军浆。我一直安慰自己,他們只是感情好挡闰,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布乒融。 她就那樣靜靜地躺著,像睡著了一般尿这。 火紅的嫁衣襯著肌膚如雪簇抵。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,246評(píng)論 1 308
  • 那天射众,我揣著相機(jī)與錄音碟摆,去河邊找鬼。 笑死叨橱,一個(gè)胖子當(dāng)著我的面吹牛典蜕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罗洗,決...
    沈念sama閱讀 40,819評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼愉舔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了伙菜?” 一聲冷哼從身側(cè)響起轩缤,我...
    開(kāi)封第一講書(shū)人閱讀 39,725評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贩绕,沒(méi)想到半個(gè)月后火的,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淑倾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評(píng)論 3 340
  • 正文 我和宋清朗相戀三年馏鹤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娇哆。...
    茶點(diǎn)故事閱讀 40,488評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡湃累,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碍讨,到底是詐尸還是另有隱情治力,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評(píng)論 5 350
  • 正文 年R本政府宣布垄开,位于F島的核電站琴许,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏溉躲。R本人自食惡果不足惜榜田,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锻梳。 院中可真熱鬧箭券,春花似錦、人聲如沸疑枯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,331評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荆永。三九已至废亭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間具钥,已是汗流浹背豆村。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,445評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留骂删,地道東北人掌动。 一個(gè)月前我還...
    沈念sama閱讀 48,897評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像宁玫,于是被迫代替她去往敵國(guó)和親粗恢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容