燕必成 高永祥 陳小紅
摘要:牛頓迭代法是方程求根中的一種較快捷的迭代方法,但遇到較復(fù)雜的方程時計算量較大。本文采用了MATLAB編程來實現(xiàn)牛頓迭代法,并給出了具體的計算例子。
關(guān)鍵詞:牛頓迭代法 MATLAB編程 算法思想
1 問題的提出
牛頓迭代法收斂速度快,但每次都要求導(dǎo),求逆,計算量相當(dāng)大。為了減少計算量,引入簡化的牛頓迭代法。
2 算法思想
以前我們解一元方程f(x)=0時采用過牛頓法,其幾何意義是在根x*的附近取點x0作為方程的近似值,如圖1-1所示,過曲線y=f(x)上的點(x0,f(x0))作切線,以它作為 y=f(x)的近似。切線與x軸的的交點x1作為根x*的第二次近似,不斷作下去,便得到迭代公式
xk+1=xk-■ k=0,1,2…
當(dāng)f(x)滿足一定條件下,迭代序列{xk}收斂到x*。
解一元方程f(x)=0的牛頓法的主要思想是將非線性函數(shù)線性化。因此仿照一元方程的情形,就得到非線性方程組的牛頓迭代法。
令
則方程組
設(shè)(x1(k),x2(k),…,xn(k))是方程組(2-1)的一組近似解,把它的左端在(x1(k),x2(k),…,xn(k))處用多元函數(shù)的泰勒展式展開,然后取線性部分,便得方程組(2-1)的近似方程組:
這是關(guān)于Δxi(k)=xi-xi(k)(i=1,2,…,n)的線性方程組,如果它的系數(shù)矩陣(見2-3):
非奇異,則可解得(見2-4):
矩陣(2-3)稱為向量函數(shù)F(x)的雅可比矩陣,記作F′(x)。又記x■■=xi■+Δxi(k)。
3 算法程序
其程序為:
%ndf.m
function ndf=ndf(x)
clc;
disp(' MATLAB編的簡化牛頓迭代法程序 ')
disp(' 浙江機電職業(yè)技術(shù)學(xué)院機械工程學(xué)院 ')
disp(' -------------------------------------------------------------------------------------- ')
syms x1 x2 x3 x4 x5 x6 x7 x8 x9
x=input('請以[x1,x2,...]的形式輸入未知變量x=');
F=input('請以[ ; ;...]的形式輸入非線形方程組的矩陣F(x)=');
x0=input('請以行的形式輸入未知變量的初始值x0=');
n=length(x);%確定未知變量的個數(shù)
g=jacobian(F,x);%產(chǎn)生雅可比矩陣
F0=subs(F,x,x0);%給方程組的矩陣置初值
g0=subs(g,x,x0);%給雅可比矩陣置初值
if det(g0)==0;
disp(' 不符牛頓迭代法的條件?。?!')
break
end
4 總結(jié)
牛頓迭代法收斂速度快,但要求導(dǎo),求逆。計算的結(jié)果受初值,迭代次數(shù)(或精度要求)的影響比較大,如果求導(dǎo)后代入初值,如結(jié)果為零,則無法迭代。因而當(dāng)求導(dǎo)后結(jié)果為零時,必須尋求另外的方法來計算。
參考文獻:
[1]云磊.牛頓迭代法的MATLAB實現(xiàn)[J].信息通信,2011(6).
[2]倪健,馬昌鳳.解非線性方程牛頓迭代法的一種新的加速技巧[J].廣西科學(xué)院學(xué)報,2010(1).
[3]王霞,張啟虎.數(shù)值分析中牛頓迭代法的引入方法探討[J].天中學(xué)刊,2010(5).