您好,欢迎访问三七文档
数学与统计学院数学实验报告姓名:苟于翠专业:信息与计算科学学号:201370020107实验六方程求解一、实验目的用迭代法求解方程及线性方程组二、实验环境Mathematica5.0系统三、实验的基本理论与方法1、方程求根给定实数域上光滑的实值函数f(x)以及初值x0定义数列xxnnf1n=0,1…(1),,1,0,nxn称为f(x)的一个迭代序列。给定迭代函数f(x)以及一个初值x0利用(1)迭代得到数列,,1,0,nxn如果数列x0收敛于一个*x,则有)(**xfx.(2)即*x是方程x=f(x)的解。由此启发我们用如下的方法球方程g(x)=0的近似解。将方程g(x)=0改写为等价的方程x=f(x),(3)然后选取一初值利用(1)做迭代。迭代数列xn收敛的极限就是方程g(x)=0的解。为了使得迭代序列收敛并尽快收敛到方程g(x)=0的某一解的条件是迭代函数f(x)在解的附近的导数将的绝对值尽量小,因此迭代方程修订成xxfxhx)1()()((4)选取使得||'xh在解的附近尽量小.。为此,我们可以令,01)()(xfxh得)(11xf.于是1)()()(xfxxfxxh.特别地,如果取f(x)=g(x)+x,则可得到迭代公式.,1,0,)()(1nxgxgxxnnnn(5)2、线性方程组的迭代求解给定一个n元线性方程组nnnnnnnnbxaxabxaxa111111(6)或写成距阵的形式Ax=b,(7)其中aijA是n阶方程,Tnxxx,,1及Tnbbb,,1均为n维列向量。熟知,当距阵A的行列式非零时方程(7)有唯一的解。迭代法是求解这些问题的有效方法之一。用迭代的方法求解线性方程组的思想与上节介绍的方程求解的方法是类似的。假设我们可以将方程组(7)改写成x=Mx+f(8)其中mijM是n阶距阵,Tnfff,,1是n维列向量。任意给定初始向量x0,由迭代fMxxnn1(9)确定向量序列1,0,nxn如果xn收敛到向量x,则有fMxx即x是方程组(7)的解。假设矩阵A的对角元素0aij,i=1,2,3,……n。令),,(11aanndiagD,则我们可以将方程(7)改写成()DxDAxb或11()xIDAxDb(10)由上式即可确定一种迭代格式。如果即将矩阵AID1分解为U+L,其中L,U分别为下三角阵与上三角阵,则(10)可以进一步改成1()ILxUxDb或111()()xILUxILDb(11)上式又可确定另一种迭代格式。3、非线性方程组的迭代求解理论类似于单变量的方程组及线性方程组的求解,用迭代方法可以求更加复杂的非线性方程组的解,给定非线性方程组111(,,)0,,(,,)0.nnnfxxfxx(12)将它改写为等价的方程组1111(,,),,(,,).nnnnxgxxxgxx或()xgx(13)其中,x为n维列向量Tnxxx),...,(1,1((),())Tnggxgx为n维列向量函数,由上式即确定了一种迭代格式1(),0,1nnxgxn.由于非线性方程组可能有许多解(甚至有无穷多个解),因此对它的求借比线性方程组的求解要面临更多的挑战。四、实验的内容与步骤迭代序列是否收敛?练习1设.)(baxxf利用(1)做迭代得到序列,1,0,nxn(1)写出序列xn的通项公式为:120(1)nnnnxaxaaab(2)在什么条件下,迭代(1)对任意的初值0x都收敛?答:据几何级数的收敛性,当||1a时,迭代(1)对任意的初值0x都收敛。(3)影响收敛性的主要量是什么?它与)(xf的一阶导数有什么关系?常数b对迭代的收敛性有没有影响?收敛速度的快慢由什么量决定?答:影响收敛性的主要量是a,它即为()fx的一阶导数,常数b对迭代的收敛性没有影响,收敛速度的快慢由a和b共同决定。(4)对于任意给定的线性方程0)(BAxxg,你是否可以将它改写成等价的形式)(xfx使得迭代总是收敛?答:对于任意给定的线性方程()0gxAxB,我们总可以将它改写成等价的形式()xfx使得迭代总是收敛。练习2方程求根1、考察用迭代函数f(x)=2sin(x)求解方程g(x)=2sin(x)-x=0的解的情况。(1)在同一直角坐标系中,画出y=f(x)及y=x的图像。从图上观察,方程x=2sin(x)有几个解?在计算机中打开Mathematica4.0系统;点击鼠标进入工作区后,输入以下语句Plot[{Sin[x],x},{x,-Pi,Pi}]运行结果:321123321123结果分析:通过观察函数图像可得f(x)=2sin(x)有三个解。(2)取初值5.00x做迭代,迭代序列是否收敛?如果收敛,它收敛到哪一个解?取其他初值,观察迭代的结果。是否可以选取到非零的初值x0,使得迭代序列收敛到g(x)=0的解x=0?①初值5.00x,迭代20次产生的迭代序列mathematica程序如下:Iterate[f_,x0_,n_Integer]:=Module[{t={},i,temp=x0},AppendTo[t,temp];For[i=1,i=n,i++,temp=f[temp];AppendTo[t,temp]];t]f[x_]:=2Sin[x];Iterate[f,0.5,20]运行结果为:{0.5,0.958851,1.63706,1.99561,1.82223,1.93711,1.86731,1.91272,1.88422,1.90257,1.89093,1.89838,1.89364,1.89667,1.89474,1.89597,1.89519,1.89569,1.89537,1.89557,1.89544}结果分析:通过实验结果我们看到,迭代序列收敛于1.895附近。②取初值01.00x,迭代20次Iterate[f_,x0_,n_Integer]:=Module[{t={},i,temp=x0},AppendTo[t,temp];For[i=1,i=n,i++,temp=f[temp];AppendTo[t,temp]];t]f[x_]:=2Sin[x];Iterate[f,0.01,20]运行结果为:{0.01,0.0199997,0.0399967,0.079972,0.159774,0.318189,0.625695,1.17132,1.84253,1.92661,1.87472,1.90834,1.88714,1.90076,1.89211,1.89764,1.89412,1.89637,1.89493,1.89585,1.89527}③取初值0000001.00x,迭代20次Iterate[f_,x0_,n_Integer]:=Module[{t={},i,temp=x0},AppendTo[t,temp];For[i=1,i=n,i++,temp=f[temp];AppendTo[t,temp]];t]f[x_]:=2Sin[x];Iterate[f,0.0000001,20]运行结果为:{1.×10-7,2.×10-7,4.×10-7,8.×10-7,1.6×10-6,3.2×10-6,6.4×10-6,0.0000128,0.0000256,0.0000512,0.0001024,0.0002048,0.0004096,0.0008192,0.0016384,0.0032768,0.00655358,0.0131071,0.0262134,0.0524208,0.104794}④取初值5.00x,迭代20次Iterate[f_,x0_,n_Integer]:=Module[{t={},i,temp=x0},AppendTo[t,temp];For[i=1,i=n,i++,temp=f[temp];AppendTo[t,temp]];t]f[x_]:=2Sin[x];Iterate[f,-0.5,20]运行结果为:{-0.5,-0.958851,-1.63706,-1.99561,-1.82223,-1.93711,-1.86731,-1.91272,-1.88422,-1.90257,-1.89093,-1.89838,-1.89364,-1.89667,-1.89474,-1.89597,-1.89519,-1.89569,-1.89537,-1.89557,-1.89544}结果分析:由②③④可得尽管初值x0已经非常小了,但迭代结果却并不收敛于g(x)=0的解x=0,因此我们得到一个结论,,找不到非零的初值使迭代序列收敛到0.再取初值00x,同样迭代20次,Iterate[f_,x0_,n_Integer]:=Module[{t={},i,temp=x0},AppendTo[t,temp];For[i=1,i=n,i++,temp=f[temp];AppendTo[t,temp]];t]f[x_]:=2Sin[x];Iterate[f,0,20]结果为:{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}当初值为0时,迭代序列收敛于0.(3)你能否解释(2)中观察到的现象?对非线性迭代,迭代序列收敛性与什么因素有关?你能否给出迭代收敛的一个充分的条件?初始值的选取对迭代的收敛性及其收敛到哪一个解有什么影响?(提示:在一个光滑函数的局部,它可以近似看成一个线性函数。然后,你可以利用线性迭代的有关结论。)答:通过以上观察到的现象,我们看到,对非线性迭代,迭代序列收敛性与迭代函数和初值都有关,取不同的初值会得到不同的收敛结果。练习3利用(5)式的迭代方法求解方程0123xx的根,将它的收敛速度与你得到的其他的迭代公式相比较,那个更快?mathematica程序如下:当初值5.00x时,迭代10次的结果为NTIterate[g_,x0_,n_Integer]:=Module[{i,var=x0,t={},h},h[x_]=Dt[g[x],x];For[i=1,in,i++,AppendTo[t,var];If[h[var]0,var=N[var-g[var]/h[var],20],Print[DividedbyZeroafter,i,'siterations.];Break[]]];t]g[x_]:=x^3-2*x+1;NTIterate[g,0.5,10]运行结果为:{0.5,0.6,0.617391,0.618033,0.618034,0.618034,0.618034,0.618034,0.618034,0.618034}②当初值2.00x时,迭代10次的结果为NTIterate[g_,x0_,n_Integer]:=Module[{i,var=x0,t={},h},h[x_]=Dt[g[x],x];For[i=1,in,i++,AppendTo[t,var];If[h[var]0,var=N[var-g[var]/h[var],20],Print[DividedbyZeroafter,i,'siterations.];Break[]]];t]g[x_]:=x^3-2*x+1;NTIterate[g,0.2,10]运行结果为:{0.2,0.523404,0.60538,0.617709,0.618034,0.618034,0.618034,0.618034,0.618034,0.618034}结果分析:由上述试验结果我们发现,使用改进的迭代公式求方程的根,它的收敛速度比其他的迭代公式要快,而且随着迭代次数的增加,迭代值趋于稳定。练习4设0.20.30.40.2M,任意取定向量f及初始向量x0利用(9)
本文标题:实验六方程求解
链接地址:https://www.777doc.com/doc-2459353 .html