资源描述:
《牛顿法解非线性方程组实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验名称:牛顿法解非线性方程组1引言我们已经知道,线性方程组我们可以采取Jacobi迭代法,G-S迭代法以及SOR迭代方法求解。而在科学技术领域里常常提出求解非线性方程组的问题,例如,用非线性函数拟合实验数据问题、非线性网络问题,用差分法求解非线性微分方程问题等。我们在解非线性方程组时,也考虑用迭代法求解,其思路和解非线性方程式一样,首先要将F(x)=0转化为等价的方程组或者简记为x=g(x),其中迭代法:首先从某个初始向量开始,按下述逐次代入方法构造一向量序列:其中,。或写成向量形式:如果(存在),称为收敛。且当为连续函数时,可得说明为方程组的解。又称为x=g(x)的不
2、动点。本实验中采用牛顿迭代法来求解非线性方程组。2实验目的和要求运用matlab编写一个.m文件,要求用牛顿法非线性方程组:1算法原理与流程图1、算法原理设有非线性方程组F(x)=0其中:由偏导数作成的矩阵记为J(x)或称为F(x)的Jacobi矩阵设为F(x)=0的解,且设,为的近似解,现利用多元函数在点的泰勒公式有其中,在与x的所连的线段内。如果用泰勒公式中的线性函数近似代替,并将线性方程组的解作为的第k+1次近似解记为将上述方程写成矩阵形式:如果为非奇异矩阵,则得到牛顿迭代公式:求解非线性方程组F(x)=0牛顿法或为用上式可知,每计算一步,需要:(1)计算矩阵及;(
3、2)求解一个线性方程组:(3)计算。2、流程图见附图11程序代码及注释%牛顿法解非线性方程组function[Z,P,k,e]=newton(P,e0)%用P输入初始猜想矩阵,不断迭代输出计算解%Z为迭代结束后的F矩阵%k为迭代次数,e为每次迭代后的无穷范数,e0为误差限Z=F(P(1),P(2));J=JF(P(1),P(2));Q=P-JZ;e=norm((Q-P),inf);P=Q;Z=F(P(1),P(2));k=1;whilee>=e0J=JF(P(1),P(2));Q=P-JZ;e=norm((Q-P),inf);P=Q;Z=F(P(1),P(2));k=
4、k+1;endend%子函数一,用来求每一步的F(x)function[out]=F(x,y)symsx1x2;f1=x1-0.5*cos(x2);f2=x2-0.5*sin(x1);Y=[f1;f2];x1=x;x2=y;out=subs(Y);end%子函数二,用来求每一步的Jacobi矩阵function[y]=JF(x,y)symsx1x2f1=x1-0.5*cos(x2);f2=x2-0.5*sin(x1);df1x=diff(sym(f1),'x1');df1y=diff(sym(f1),'x2');df2x=diff(sym(f2),'x1');df2y=d
5、iff(sym(f2),'x2');j=[df1x,df1y;df2x,df2y];%j中的元素为一阶偏导数x1=x;x2=y;y=subs(j);end5算例分析(1)首先输入系数矩阵初始猜想解和误差限e0>>P=[00]';>>e0=0.001;(2)输出结果>>[ZPke]=newton(P,e0)Z=1.0e-009*0.5504424138713660.398026500647575P=0.4864051551457130.233725502568820k=3e=5.835820948590920e-005其中,P为计算解,k为迭代次数,Z为第k次迭代后的F矩阵
6、,e为第k次迭代后的6讨论与结论1、时间复杂度:>>tic;[ZPke]=newton(P,e0);tocElapsedtimeis0.068248seconds.2、程序优化在本次的程序设计中,我采用了C语言中子函数调用的思想,使得程序的可读性增强,条理清晰。其次,在求每一步的时,要解方程,此语句可以用Q=P-inv(J)*Z;但考虑到算法的时间复杂性,本语句采用了Q=P-JZ来实现,从而减少了计算机时间。参考文献[1]易大义,沈云宝,李有法.计算方法(第2版),浙江大学出版社.p.29-53.[2]张琨高思超毕靖编著MATLAB2010从入门到精通电子工业出版社输入
7、n,x,ε,N0计算输出x,S,kk=1,2,…,N0求解线性方程组J(x)Y=-F(x)计算计算输出迭代N0次还没有达到精度要求信息StopS<εYN附图1流程图