李雙江,楊 霞,周 斌
(1.三門峽市水利勘測設(shè)計(jì)有限責(zé)任公司,河南三門峽472000;2.汕尾市水利水電規(guī)劃設(shè)計(jì)院,廣東汕尾334000)
水面線不同計(jì)算方法比較
李雙江1,楊 霞2,周 斌2
(1.三門峽市水利勘測設(shè)計(jì)有限責(zé)任公司,河南三門峽472000;2.汕尾市水利水電規(guī)劃設(shè)計(jì)院,廣東汕尾334000)
本文對比了迭代法、牛頓法和牛頓下山法運(yùn)用于江河水面線計(jì)算的差異,并對以上各算法的收斂性進(jìn)行了探討,提出了牛頓下山法計(jì)算江河水面線的公式和方法,得出了牛頓下山法較普通迭代法有更強(qiáng)的適應(yīng)性的結(jié)論,并在江河水面線計(jì)算中推薦牛頓下山法。
水面線計(jì)算;迭代求解;牛頓下山法
水面線計(jì)算是涉河工程的常遇問題。水面線計(jì)算通常采用能量方程求解,能量方程往往會(huì)產(chǎn)生雙解問題[1],計(jì)算方法采用不當(dāng),可能會(huì)求得假解,使計(jì)算結(jié)果與實(shí)際情況不符。迭代法是現(xiàn)行軟件中常用的計(jì)算方法,但在運(yùn)用中存在一些缺陷。筆者在分析多種迭代解法的基礎(chǔ)上,選擇牛頓下山法作為能量方程求解的迭代算法。
江河水流流速不大,通常均為緩流(Fr<1)。為控制在分段計(jì)算過程中傳播的誤差不致影響成果精度,緩流流態(tài)的江河水面線通常適宜從下游向上游推算[2]。因此本文僅針對從下游向上游推算江河水面線的方法進(jìn)行探討。
江河水面線計(jì)算通常采用能量法,基本方程[3]為:
式中:
z1—上游斷面的水位;
z2—下游斷面的水位;
υ1—上游斷面的流速;
υ2—下游斷面的流速;
a1—上游斷面的動(dòng)能校正系數(shù);
a2—下游斷面的動(dòng)能校正系數(shù);
ζ—河道平均局部阻力系數(shù);
Δ s—計(jì)算河段的長度;
Q—河道平均流量;
K1—上游斷面的流量模數(shù);
K2—下游斷面的流量模數(shù);
為方便后續(xù)討論,將(1)式變形為:
對于方程x=φ(x),可按以下步驟求解[4]:
步1 準(zhǔn)備:提供迭代初值x0;
步2 迭代:計(jì)算迭代值x1=φ(x0);
步3 控制:檢查|x1-x0|,若|x1-x0|>ε(ε為預(yù)先指定的精度),則用x1替代x0轉(zhuǎn)步2繼續(xù)迭代;當(dāng)|x1-x0|≤ε時(shí)終止計(jì)算,取x1為所求的結(jié)果。
對于能量方程,已知下游水位求上游水位時(shí),f(z2)為已知值,(2)式可變形為下式:
(3)式中υ1的和K1均為z水位的函數(shù),其余項(xiàng)均為常數(shù)項(xiàng)。顯然,(3)式符合方程x=φ(x),故可采用迭代法求解方程。
迭代法求解方程x=φ(x)在方程解x*的鄰域內(nèi)局部收斂是有條件的,僅當(dāng)φ'(x)在x*的鄰域內(nèi)連續(xù),且|φ'(x)|<1時(shí),迭代法才收斂[4]。因此,采用迭代法直接求解能量方程是存在一定缺陷的,本文將進(jìn)一步尋找其它收斂性更強(qiáng)的算法。
對于φ(x)=0方程,牛頓法按以下步驟求解[4]:
步1 準(zhǔn)備:提供迭代初值x0,計(jì)算φ0=φ
步3 控制:檢查|x1-x0|,若|x1-x0|>ε(ε為預(yù)先指定的精度),則用x1替代x0轉(zhuǎn)步2繼續(xù)迭代;當(dāng)|x1-x0|≤ε時(shí)終止計(jì)算,取x1為所求的結(jié)果。
對于能量方程,已知下游水位求上游水位時(shí),f(z2)為已知值,(2)式可變形為下式:
顯然,(4)式符合φ(x)=0的方程,可用牛頓法求解水面線方程。對于牛頓法,存在方程的解x*的鄰域牛頓法無條件收斂;但如果初值x0偏離x*較遠(yuǎn)位于局部收斂鄰域外時(shí),牛頓法仍可能是發(fā)散的。為了防止初值x0的偏差造成迭代發(fā)散,采用下山法[4]強(qiáng)制迭代數(shù)列收斂,使每一步迭代均滿足|φk+1|<|φk|,強(qiáng)制迭代收斂。引入下山因子λ(0<λ≤1),將步2調(diào)整為:
下山因子的選擇是個(gè)逐步探索的過程,可從λ=1開始反復(fù)折半試算,直至能滿足|φk+1|<|φk|條件使迭代數(shù)列收斂。
為采用牛頓下山法,需要計(jì)算函數(shù)φ(z1)=z1的導(dǎo)數(shù)。將兩式代入φ(z1)函數(shù)求導(dǎo),有:式中:
n—糙率;
ω—過水面積;
R—水力半徑;
考慮到江河水面線大多為寬淺式,近似概化為寬淺矩形河槽,引入以下數(shù)式:
式中:
B—河道寬度;
h—水深;
x—濕周;
于是,(5)式可簡化為:
水面線方程的導(dǎo)數(shù)可以采用(5)式差分計(jì)算,也可以采用近似簡化的(6)式計(jì)算。
能量方程計(jì)算水面線往往會(huì)產(chǎn)生雙解[1],因此盡管牛頓下山法算法收斂,從數(shù)學(xué)上可以求得離初始解較近的理論解,但該理論解仍有可能是假解,初值x0的選擇仍然是十分重要的。注意到江河水面線計(jì)算的上、下游流速差有限,略去項(xiàng)的簡化公式仍有相當(dāng)高的計(jì)算精度,因此可將(2)式簡化為[5]:
注意到K1為變量z1的單調(diào)增函數(shù),即K'1>0。于是有,即f(z1)為單調(diào)增函數(shù),(7)式必然只有一個(gè)解。對于單調(diào)增函數(shù),采用逐步搜索法、二分法、迭代法等諸多算法都是很容易求解的,算法也是穩(wěn)定的,該解答作為牛頓下山法的迭代初值是十分合適的。
采用牛頓下山法計(jì)算水面線的步驟為:
步1 準(zhǔn)備:采用(7)式計(jì)算初始解x0,采用
(2)式計(jì)算φ0=φ(x0),用(5)式或(6)式計(jì)算
步3 控制:比較φ1和φ0,如果|φ1|<| φ0|則轉(zhuǎn)步4,否則取λ=λ/2重回步2計(jì)算;
步4 ε控制:檢查|x1-x0|,若|x1-x0|>ε(ε為預(yù)先指定的精度),則用x1替代x0轉(zhuǎn)步2繼續(xù)迭代;當(dāng)|x1-x0|≤ε時(shí)終止計(jì)算,取x1為所求的結(jié)果。
對迭代法、牛頓法和牛頓下山法三種方法在水面線迭代計(jì)算中的計(jì)算要素對比見表1。
表1 各算法差異對比表
迭代法算法簡潔,但屬條件收斂,適用性不強(qiáng);牛頓法算法略復(fù)雜,但收斂性較好;牛頓下山法算法最為復(fù)雜,采用了強(qiáng)制收斂手段,使其收斂域的范圍得到了大幅提高,對于初值的誤差適應(yīng)能力最強(qiáng)。目前,國內(nèi)采用計(jì)算機(jī)程序求解江河水面線的方法已是業(yè)內(nèi)的主流,程序可一次編制反復(fù)使用,算法的收斂性在程序復(fù)用上有著決定性的意義,因此筆者在江河水面線計(jì)算中推薦牛頓下山法。
迭代法是水面線計(jì)算常用的算法之一,但是在收斂性上不能得到充分保證,不能保證在所有河段上均能適用。牛頓法采用了切線逼近,逼近速度快,具有局部收斂性,但計(jì)算過程中收斂受到初值
T V 133
:A
:1672-2469(2015)09-0050-04
10.3969/j.i s s n.1672-2469.2015.09.017
李雙江(1985年—),男,工程師。