楊 永,李海濱,2
(1.內(nèi)蒙古工業(yè)大學(xué) 理學(xué)院,呼和浩特 010051;2.內(nèi)蒙古工業(yè)大學(xué) 工程訓(xùn)練教學(xué)部,呼和浩特 010051)
1994年,鐘萬勰[1-2]將運動方程轉(zhuǎn)入Hamilton體系,在時域上給出了運動方程以積分形式的解,同時針對該解中的矩陣指數(shù)函數(shù)提出了精細積分算法,該方法避免了計算機中的截斷誤差,將矩陣指數(shù)的計算精度提高到了計算機的精度。但是由于非齊次項的任意性,如何有效處理精細積分法解中的積分是一個需要解決的問題。Zhong等[3-4]將非齊次項在每個積分區(qū)段進行線性化近似,提出了精細時程法,但是精確的遞推格式需要對系統(tǒng)矩陣求逆,并且當(dāng)步長較大時,線性化的假設(shè)會導(dǎo)致計算誤差增大。為解決這一問題,顧元憲等[5]提出了增維精細積分算法,將非齊次項看做狀態(tài)變量納入求解過程中,從而將非齊次項方程轉(zhuǎn)化為齊次方程,保證了計算精度。但是此類算法對非齊次項的形式有一定的要求,只適用于荷載項為幾種特殊項的情況。高小科等[6-10]將精細積分與數(shù)值積分法相結(jié)合,直接對積分解中的積分項進行求解,避免了矩陣的求逆,常用的數(shù)值方法有辛普森、科茨、高斯等方法,但由于需要選擇積分點,所以需要額外計算積分點的矩陣指數(shù)。富明慧等[11-12]利用遞推算法和矩形積分公式,提出了廣義精細積分算法(generalized precise time step integration method,GPTSIM),在非齊次項為多項式、指數(shù)函數(shù)以及三角函數(shù)情況下,具有優(yōu)越的計算性能。但對于其他形式的非齊次項,需要先對非齊次項進行擬合,此時數(shù)值解的精度主要取決于非齊次項擬合的精度。王海波等[13]在廣義精細積分算法的基礎(chǔ)上,結(jié)合泰勒級數(shù)對其進行了推廣,但是實質(zhì)仍是采用多項式擬合非齊次項。同時,在現(xiàn)有的積分計算方法中,步長對結(jié)果的影響較大。選擇合適的步長往往較為困難。
本文將精細積分法與神經(jīng)網(wǎng)絡(luò)相結(jié)合,提出一種基于對偶神經(jīng)網(wǎng)絡(luò)的積分算法。不同于其他的數(shù)值積分方法,該方法分別利用一組神經(jīng)網(wǎng)絡(luò)A和B逼近被積函數(shù)和原函數(shù),利用神經(jīng)網(wǎng)絡(luò)對任意非線性函數(shù)逼近的能力,實現(xiàn)對任意復(fù)雜形式函數(shù)的積分。本文采用對偶神經(jīng)網(wǎng)絡(luò)對精細積分解中的積分項進行計算,在保證高精度的同時,不對非齊次項的形式進行任何假定,同時避免了對矩陣求逆。通過算例,驗證了本文方法在任意荷載形式下均有良好的計算精度。
在結(jié)構(gòu)動力分析中,一般動力學(xué)方程為
(1)
式(1)的初始條件為
(2)
(3)
得
代入式(1)得
(4)
式(4)可以寫為
(5)
其中,
此時,式(5)的解可以寫為
(6)
式(6)為動力方程的解,對其進行離散化處理,記時間步長為Δt,有
(7)
令T=exp(H·Δt),得
(8)
式中,T為傳遞矩陣,可利用加法定理精確算得
T=exp(H·Δt)=[exp(H·Δt/m)]m]
(9)
令Δτ=Δt/m,取m=2N,當(dāng)N取20時,Δτ很小,由泰勒級數(shù)可得
exp(H·Δτ)≈I+H·Δτ+(H·Δτ)2/2=I+Ta
(10)
從而
(11)
(12)
由于exp(-x)的存在,上述的積分計算困難。除常用的數(shù)值計算方法外,富明慧提出了一種廣義積分算法,在式(12)中f(x)為多項式、指數(shù)函數(shù)和三角函數(shù)情況下,廣義積分算法可以直接使用。但在實際應(yīng)用中,荷載項的形式往往很復(fù)雜,本文提出一種對偶神經(jīng)網(wǎng)絡(luò)積分算法,能夠適用于任意形式的荷載項。
一個對偶神經(jīng)網(wǎng)絡(luò)包含A、B兩個前向型BP神經(jīng)網(wǎng)絡(luò)。其中,神經(jīng)網(wǎng)絡(luò)A用來學(xué)習(xí)積分算式中的被積函數(shù),另一個神經(jīng)網(wǎng)絡(luò)B,會通過與神經(jīng)網(wǎng)絡(luò)A在權(quán)值和激活函數(shù)上的特定聯(lián)系,由神經(jīng)網(wǎng)絡(luò)A來確定,用于構(gòu)建積分被積函數(shù)的原函數(shù)。神經(jīng)網(wǎng)絡(luò)B的結(jié)構(gòu)框圖如圖1所示。
圖1 神經(jīng)網(wǎng)絡(luò)B原函數(shù)示意圖Fig.1 Schematic diagram of original function of neural network B
神經(jīng)網(wǎng)絡(luò)B中網(wǎng)絡(luò)輸出和輸入變量間函數(shù)關(guān)系如式(13)所示
(13)
對神經(jīng)網(wǎng)絡(luò)B確定的函數(shù)關(guān)系式(13)左右兩側(cè)同時對變量x進行求導(dǎo)數(shù),得到式(14)
(14)
令
(15)
則式(14)可以改寫為
(16)
圖2 神經(jīng)網(wǎng)絡(luò)A被積函數(shù)示意圖Fig.2 Schematic diagram of integrand function of neural network A
(17)
神經(jīng)網(wǎng)絡(luò)A與神經(jīng)網(wǎng)絡(luò)B為一對關(guān)于變量的積分對偶神經(jīng)網(wǎng)絡(luò),簡稱對偶神經(jīng)網(wǎng)絡(luò)。
式(17)中
(18)
由上述可知,通過訓(xùn)練被積函數(shù)樣本點集合,則可以通過對偶神經(jīng)網(wǎng)絡(luò)方法獲得被積函數(shù)的原函數(shù),在此基礎(chǔ)上,可以根據(jù)牛頓萊布尼茨公式得出積分值,至此實現(xiàn)了積分的計算。
對于計算結(jié)果中需要進行積分的式(8)
式中,T可由精細算法算得。
設(shè)積分項的被積函數(shù)為yk(τ)=exp[H(tk+1-τ)]·F(τ),其中,H為n×n矩陣,F(xiàn)(τ)為n×1矩陣,輸出yk(τ)為n×1矩陣。
圖3 被積函數(shù)網(wǎng)絡(luò)結(jié)構(gòu)示意圖Fig.3 Schematic diagram of integrand function network structure
y(τ)=NETAk(τ)
(19)
圖4 原函數(shù)網(wǎng)絡(luò)結(jié)構(gòu)示意圖Fig.4 Schematic diagram of original function network structure
Y(τ)=NETBk(τ)
(20)
至此,式(8)可以寫成
(21)
由上述計算過程可知,對偶神經(jīng)網(wǎng)絡(luò)積分法保留了數(shù)值積分的特點,在計算過程中只需要各時間點的荷載值,對函數(shù)的形式并無任何要求,因此能夠適用于任意荷載形式。
算例一
通過上述積分來檢驗本文算法的精度,同時與富明慧等研究中的廣義積分算法進行比較。
廣義積分算法選用不同冪級數(shù)階次在t=0處擬合函數(shù)ln(1+t),K為選用冪級數(shù)的階數(shù)。
對偶神經(jīng)網(wǎng)絡(luò)計算步驟如下:
步驟1構(gòu)建神經(jīng)網(wǎng)絡(luò)A學(xué)習(xí)被積函數(shù)etln(1+t),隱層和輸出層的激活函數(shù)分別為sigmoid、purelin,神經(jīng)網(wǎng)絡(luò)層數(shù)為3層,隱層單元個數(shù)為30,輸入層單元個數(shù)為1,輸出層單元個數(shù)為1。
步驟2將t的取值范圍[0,0.1]進行50等分取值構(gòu)成網(wǎng)絡(luò)A輸入樣本,計算函數(shù)etln(1+t)的值做為網(wǎng)絡(luò)A的輸出樣本。
步驟3訓(xùn)練神經(jīng)網(wǎng)絡(luò)A,訓(xùn)練誤差設(shè)置為1×10-6,最大訓(xùn)練步數(shù)2 000。訓(xùn)練完成后,由式(15)即可得到原函數(shù)網(wǎng)絡(luò)B,神經(jīng)網(wǎng)絡(luò)B的隱層和輸出層激活函數(shù)分別為softplus、purelin。
計算結(jié)果如表1所示(表中結(jié)果加粗字體部分為與精確解不同部分)。
表1 神經(jīng)網(wǎng)絡(luò)積分法和廣義積分法結(jié)果與精確解比較Tab.1 Comparison of the results of neural network integration method and GPTSIM with the exact solution
由表1中數(shù)據(jù)可以看出,廣義積分法在冪級數(shù)階數(shù)較低的時候精度較差,隨著冪級數(shù)擬合階數(shù)的提高,精度逐步提高。這是因為廣義積分法中需要先采用冪級數(shù)對積分項進行擬合,然后利用遞推格式得到積分結(jié)果。而一些復(fù)雜函數(shù)在冪級數(shù)擬合過程會產(chǎn)生較大的誤差,所以廣義積分法的精度取決于擬合精度。而對偶神經(jīng)網(wǎng)絡(luò)積分法采用一個神經(jīng)網(wǎng)絡(luò)A擬合積分項,根據(jù)萬能逼近原理,一個三層神經(jīng)網(wǎng)絡(luò)能夠逼近任意函數(shù),在神經(jīng)網(wǎng)絡(luò)A無限逼近被積函數(shù)的同時,神經(jīng)網(wǎng)絡(luò)B無限逼近原函數(shù)。通過調(diào)整隱層單元的個數(shù),對偶神經(jīng)網(wǎng)絡(luò)積分法能夠達到高精度。通過對比,神經(jīng)網(wǎng)絡(luò)在擬合樣本容量為50的情況下就已經(jīng)達到與五階廣義積分法解的同等精度,表明了本文對偶神經(jīng)網(wǎng)絡(luò)積分具有較高精度。同時,通過提高樣本容量,也能進一步提高對偶神經(jīng)網(wǎng)絡(luò)的積分精度。
算例二
運動方程
其中,
步驟1構(gòu)建神經(jīng)網(wǎng)絡(luò)A學(xué)習(xí)被積函數(shù)exp[H(tk+1-τ)]·F(τ),由于H為4×4矩陣,F(xiàn)(τ)為4×1矩陣,因此設(shè)置神經(jīng)網(wǎng)絡(luò)A的輸出層單元個數(shù)為4,其輸入層單元個數(shù)為1,隱藏層單元個數(shù)為30,隱層和輸出層激活函數(shù)分別為sigmoid、purelin。
步驟2將τ在區(qū)間[tk,tk+1]范圍內(nèi)100等分取值構(gòu)成神經(jīng)網(wǎng)絡(luò)A輸入樣本,計算函數(shù)exp[H(tk+1-τ)]·F(τ)的值做為神經(jīng)網(wǎng)絡(luò)A的輸出樣本。
步驟3訓(xùn)練神經(jīng)網(wǎng)絡(luò)A,訓(xùn)練誤差設(shè)置為1×10-6,最大訓(xùn)練步數(shù)2 000。訓(xùn)練完成后,由式(15)即可得到原函數(shù)網(wǎng)絡(luò)B,神經(jīng)網(wǎng)絡(luò)B的隱層和輸出層激活函數(shù)分別為softplus、purelin,神經(jīng)網(wǎng)絡(luò)B的網(wǎng)絡(luò)權(quán)值由神經(jīng)網(wǎng)絡(luò)A確定。
為便于比較,取與解析精細積分法相同步長0.28。計算結(jié)果如表2所示(表中結(jié)果加粗字體部分為與精確解不同部分)。
表2 x1,x2位移Tab.2 Displacement of x1,x2
從表2中數(shù)據(jù)可以看出,在荷載為常數(shù)荷載時,精細時程積分的計算結(jié)果與精確解在有效位數(shù)內(nèi)完全一致,具有足夠的計算精度。這是因為精細時程積分法假設(shè)非齊次項在步長[tk,tk+1]范圍內(nèi)是線性的,當(dāng)荷載項為常數(shù)時,由于步長時間較小,精細時程積分的線性化假設(shè)對計算結(jié)果影響較小。但是精細時程積分法在計算中需要對矩陣H求逆,限制了精細時程積分法的應(yīng)用范圍。而對偶神經(jīng)網(wǎng)絡(luò)積分法對積分項進行直接積分,使用神經(jīng)網(wǎng)絡(luò)對積分函數(shù)進行逼近,因此不涉及矩陣求逆,同時可以看出,神經(jīng)網(wǎng)絡(luò)積分法的計算結(jié)果在有效位數(shù)內(nèi)與精細時程積分完全一致,說明了對偶神經(jīng)網(wǎng)絡(luò)積分在避免矩陣求逆的同時也保證了精度。而威爾遜-θ法隨著時間的增長,誤差不斷增大。
算例三
運動方程
本算例的荷載為非線性正弦荷載,其解析解為
分別采用精細時程積分以及直接積分法中的科茨公式、高斯公式和GPTSIM與本文對偶神經(jīng)網(wǎng)絡(luò)積分法進行對比。GPTSIM采用泰勒級數(shù)展開形式下的廣義精細積分法,并經(jīng)過精度修正。
由于對偶神經(jīng)網(wǎng)絡(luò)計算積分對函數(shù)形式?jīng)]有要求,因此算例三對偶神經(jīng)網(wǎng)絡(luò)積分法的網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)與算例二相同,神經(jīng)網(wǎng)絡(luò)A的輸出層單元個數(shù)為4,輸入層單元個數(shù)為1,隱藏層單元個數(shù)為30,訓(xùn)練誤差設(shè)置為1×10-9,最大訓(xùn)練步數(shù)5 000。計算步驟也與算例二相同。
計算結(jié)果如表3所示(為方便比較,列出x1的值,表中結(jié)果加粗字體部分為與精確解不同部分)。
表3 x1位移Tab.3 Displacement of x1
算例3的激勵為正弦荷載,具有振蕩性。由表3數(shù)據(jù)可以看出,不同于常數(shù)荷載,在非線性荷載情況下,精細時程積分法的計算結(jié)果隨著時間的增加,精度明顯降低,這是因為時程積分在對時間域內(nèi)的荷載進行了線性化假設(shè),而非線性荷載線性化產(chǎn)生的誤差會隨著時間增長不斷累積,導(dǎo)致計算結(jié)果誤差也不斷增大??拼墓健⒏咚构皆谡液奢d情況下給出了較高精度的解,說明了傳統(tǒng)的數(shù)值積分方法仍是保證動力方程精細積分高精度的有效積分算法。GPTSIM和對偶神經(jīng)網(wǎng)絡(luò)算法在6位有效數(shù)字內(nèi)都與精確解一致,GPTSIM是在荷載為多項式、三角函數(shù)、指數(shù)函數(shù)情況下歸納出的一種遞推算法,因此本算例中GPTSIM精度較高,對于其他形式的荷載,需要先擬合成三次樣條函數(shù)、傅里葉級數(shù)、泰勒級數(shù)等形式。因此與精細時程積分法類似,GPTSIM的誤差除了計算誤差外,還來源于擬合誤差。而對偶神經(jīng)網(wǎng)絡(luò)對荷載形式?jīng)]有任何要求,同時還保證了計算的高精度。
(1)本文基于精細積分法和神經(jīng)網(wǎng)絡(luò),提出了一種用于求解動力方程的計算方法。該方法針對動力方程在哈密頓體系下得到的積分形式的解,利用一組神經(jīng)網(wǎng)絡(luò)同時逼近被積函數(shù)和原函數(shù),從而實現(xiàn)解中積分項的求解。計算過程中避免了矩陣求逆,具有對步長不敏感、不用對非齊次項進行假設(shè)等優(yōu)點。最后通過算例表明,本方法是神經(jīng)網(wǎng)絡(luò)與精細積分的有效結(jié)合,是一個精準(zhǔn)有效的算法。
(2)本文方法是對精細積分法的一種拓展,利用對偶神經(jīng)網(wǎng)絡(luò)方法對動力方程哈密頓體系下積分解中的涉及到的積分進行求解,將精細積分法的應(yīng)用范圍拓展到線性荷載、簡諧荷載以外的任意非齊次項形式。同時,對偶神經(jīng)網(wǎng)絡(luò)積分法本質(zhì)是一種數(shù)值積分計算方法,能夠適用于大部分積分問題,具有廣闊的應(yīng)用前景。