燕必成 高永祥 陈小红
摘要:牛顿迭代法是方程求根中的一种较快捷的迭代方法,但遇到较复杂的方程时计算量较大。本文采用了MATLAB编程来实现牛顿迭代法,并给出了具体的计算例子。
关键词:牛顿迭代法 MATLAB编程 算法思想
1 问题的提出
牛顿迭代法收敛速度快,但每次都要求导,求逆,计算量相当大。为了减少计算量,引入简化的牛顿迭代法。
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…
当f(x)满足一定条件下,迭代序列{xk}收敛到x*。
解一元方程f(x)=0的牛顿法的主要思想是将非线性函数线性化。因此仿照一元方程的情形,就得到非线性方程组的牛顿迭代法。
令
则方程组
设(x1(k),x2(k),…,xn(k))是方程组(2-1)的一组近似解,把它的左端在(x1(k),x2(k),…,xn(k))处用多元函数的泰勒展式展开,然后取线性部分,便得方程组(2-1)的近似方程组:
这是关于Δxi(k)=xi-xi(k)(i=1,2,…,n)的线性方程组,如果它的系数矩阵(见2-3):
非奇异,则可解得(见2-4):
矩阵(2-3)称为向量函数F(x)的雅可比矩阵,记作F′(x)。又记x■■=xi■+Δxi(k)。
3 算法程序
其程序为:
%ndf.m
function ndf=ndf(x)
clc;
disp(' MATLAB编的简化牛顿迭代法程序 ')
disp(' 浙江机电职业技术学院机械工程学院 ')
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);%确定未知变量的个数
g=jacobian(F,x);%产生雅可比矩阵
F0=subs(F,x,x0);%给方程组的矩阵置初值
g0=subs(g,x,x0);%给雅可比矩阵置初值
if det(g0)==0;
disp(' 不符牛顿迭代法的条件!!!')
break
end
4 总结
牛顿迭代法收敛速度快,但要求导,求逆。计算的结果受初值,迭代次数(或精度要求)的影响比较大,如果求导后代入初值,如结果为零,则无法迭代。因而当求导后结果为零时,必须寻求另外的方法来计算。
参考文献:
[1]云磊.牛顿迭代法的MATLAB实现[J].信息通信,2011(6).
[2]倪健,马昌凤.解非线性方程牛顿迭代法的一种新的加速技巧[J].广西科学院学报,2010(1).
[3]王霞,张启虎.数值分析中牛顿迭代法的引入方法探讨[J].天中学刊,2010(5).