雍龍泉
(陜西理工大學(xué) 數(shù)學(xué)與計算機科學(xué)學(xué)院, 陜西 漢中, 723001)
考慮非線性方程組
(1)
記x=(x1,x2,…,xn),向量函數(shù)F(x)=(f1(x),f2(x),…,fn(x))T,則方程組(1)等價于如下非線性方程
F(x)=0.
(2)
很多復(fù)雜的問題都可以轉(zhuǎn)化為非線性方程組的求解問題,其最基本的求解方法是牛頓法[1-7]。近年來,相繼出現(xiàn)了五階牛頓迭代法[8]、七階牛頓迭代法[9-10]、八階牛頓迭代法[11-12]、九階牛頓迭代法等[13-14]。對非線性方程組而言,牛頓迭代法需要計算偏導(dǎo)數(shù)矩陣,并依賴于初始點的選取和函數(shù)F(x)的性態(tài)[15-18],而在一些實際問題中如何選取合適的初始點本身是一個比較困難的問題,因此使用牛頓迭代法時具有一定的局限性[19]。
本文假設(shè)非線性方程組的解存在,在給定初始點后,如何把數(shù)學(xué)公式轉(zhuǎn)變?yōu)榭梢赃\行的代碼,讓初學(xué)者對編程不再望而生畏;進而提高學(xué)生編程的興趣,最終能夠利用程序?qū)嶋H問題進行求解,培養(yǎng)與提高學(xué)生的科學(xué)計算能力。
下面通過一個具體的非線性方程組,分別給出其Jacobi迭代、Gauss-Seidel迭代、Newton迭代、五階牛頓迭代;在給出迭代公式和初始點后,并分別給出了MATLAB代碼和對應(yīng)的計算結(jié)果。
算例分別用Jacobi迭代法、Gauss-Seidel迭代法、Newton迭代法、五階牛頓迭代法求解如下非線性方程組
Jacobi迭代法的迭代格式:
表1 Jacobi迭代法的MATLAB代碼
表2 Jacobi迭代計算結(jié)果
Gauss-Seidel迭代法的迭代格式:
表3 Gauss-Seidel迭代法的MATLAB代碼
表4 Gauss-Seidel迭代計算結(jié)果
Newton迭代法的迭代格式:
Newton迭代法要求矩陣F′(x)可逆,若F′(x)奇異或接近奇異,可以采用阻尼Newton迭代法進行處理。
表5 Newton迭代法的MATLAB代碼
表6 Newton迭代計算結(jié)果
文獻[20]中給出了五階牛頓迭代法:
表7 五階牛頓迭代法的MATLAB代碼
表8 五階牛頓法迭代計算結(jié)果
需要求解的非線性方程組fun1與偏導(dǎo)數(shù)矩陣dfun1的代碼見表9和表10。
表9 非線性方程組fun1的代碼
表10 偏導(dǎo)數(shù)矩陣dfun1的代碼
文獻[20-23]中分別采用該五階牛頓迭代法求解線性規(guī)劃、線性互補、非線性兩點邊值、投資組合優(yōu)化等問題。
更多的實驗結(jié)果表明:各類迭代的收斂與否、收斂快慢均與初始點的選取有關(guān);收斂階數(shù)越高,需要付出的計算代價(包括占用內(nèi)存、函數(shù)調(diào)用次數(shù))也就越大;即使高階的牛頓法,也只有初始點與根很靠近時,高階收斂性才能很好地體現(xiàn)出來。