APP下载

简化的牛顿迭代法的MATLAB实现

2014-07-14燕必成高永祥陈小红

燕必成 高永祥 陈小红

摘要:牛顿迭代法是方程求根中的一种较快捷的迭代方法,但遇到较复杂的方程时计算量较大。本文采用了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).