第五讲方程的近似根与迭代法实验目的:1.理解求方程近似解的二分法、切线法.2.了解迭代法的思想.3.用matlab编二分法、切线法的程序.实验内容:1.学习matlab命令.matlab的while-end循环语句和C语言的while循环语句类似,while循环的一般形式是:while表达式循环体end只要表达式的结果非零,循环体语句就重复执行.例1.利用while循环解答:使n!是100的第一个n是几?解:n=1;nj=1;whilenj1e100nj=nj*n;n=n+1;endn=n-1(le表示小于等于)2.二分法求方程的近似根求方程的近似解,可分两步来做:(1)确定根的大致范围,就是确定一个区间[a,b],使所求的根是位于这个区间内的唯一实根,这一步工作称为根的隔离,区间[a,b]称为所求实根的隔离区间.为了确定根的隔离区间,可以先画出y=f(x)的图形,然后从图上定出它与x轴交点的大概位置.(2)以根的隔离区间的端点作为根的初始近似值,逐步改善根的近似值的精确度,直至求得满足精确度要求的根的近似解.完成这一步工作有多种方法,这里介绍二分法和切线法.设f(x)在区间[a,b]上连续,f(a)f(b)0,且方程f(x)=0在(a,b)内仅有一个实根,那么,[a,b]就是这个根的隔离区间.取[a,b]的中点,计算,如果,则;如果与同号,那么,取,,由即知,,且;以为新的隔离区间,重复上述做法,当时,可求得,且如此重复n次,可得,且,由此可知,如果以或作为的近似值,那么,其误差小于.例2.用二分法求方程的实根的近似值,使误差不超过.解:(1)求根的初始隔离区间.在matlab工作区输入命令:ezplot('x^3+1.1*x^2+0.9*x-1.4');gridon;画出曲线图形.通过观察,根应在-2和2之间,进一步画出该部分的图形:ezplot('x^3+1.1*x^2+0.9*x-1.4',[-2,2]);gridon;更清楚看到根在0和1之间.(2)编写程序如下:f=input('输入函数f(x)=');qujian=input('输入区间=');err=input('请输入误差=');a=qujian(1);b=qujian(2);yc=1;while((b-a)err)&(yc~=0);c=(a+b)/2;x=a;ya=eval(f);x=b;yb=eval(f);x=c;yc=eval(f);ifya*yc0b=c;elsea=c;endx0=cend存为文件erfanfa.m调用erfanfa的如下结果:erfenfa输入函数f(x)='x^3+1.1*x^2+0.9*x-1.4'输入区间=[0,1]请输入误差=0.001x0=0.5000x0=0.7500x0=0.6250x0=0.6875x0=0.6563x0=0.6719x0=0.6641x0=0.6680x0=0.6699x0=0.6709三.迭代法迭代是一种逐步逼近的方法,已知方程f(x)=0的一个近似根后,通常使用某个固定公式反复校正根的近似值,使之逐步精确化,一直到满足给定的精度要求为止.具体做法是,把给定方程f(x)=0改写成等价形式在根附近任取一点作为的近似值,把代入上式右端:一般(时,).把作为根的新的近似值代入公式得.重复上述步骤,则有如下迭代公式:()其中称为迭代函数,并有如下迭代序列如果迭代序列的极限存在,则称迭代过程收敛,显然即所以如果迭代序列的极限不存在,则称迭代过程发散.例3.求方程在x=1.5附近的根.解:将方程改写成下列形式:由此得迭代公式()迭代初值.matlab程序如下:x0=1.5;fori=1:20x0=(x0+1)^(1/3)end运行如下:x0=1.35720880829745x0=1.33086095880143x0=1.32588377423235x0=1.32493936340188x0=1.32476001129270x0=1.32472594522689x0=1.32471947453436x0=1.32471824544894x0=1.32471801198820x0=1.32471796764309x0=1.32471795921988x0=1.32471795761992x0=1.32471795731601x0=1.32471795725828x0=1.32471795724732x0=1.32471795724523x0=1.32471795724484x0=1.32471795724476x0=1.32471795724475x0=1.32471795724475看到最后两项一样,即,可以认为,满足方程,即为所求根的近似值.=1.32471795724475上述迭代过程是收敛的.如果将方程改写成如下等价形式则有迭代公式迭代初值仍取,则=2.375,=12.39,...迭代过程发散.本例说明,迭代过程收敛是有一定条件的,发散的迭代过程是没有意义的.四.切线法设f(x)在[a,b]上具有二阶导数.f(a)f(b)0,且及在[a,b]上保持定号,此时,方程f(x)=0在(a,b)内有唯一实根.[a,b]为根的一个隔离区间.如果在纵坐标与二阶导数同号的那个端点作切线,这切线与x轴交点的横坐标就比该端点更接近于方程的根.取该端点为,则点处的切线方程为时,解出与x轴的交点的横坐标它比更接近于方程的根.它可以作为根的近似值.在点作切线,可得根的近似值.如此下去,一般,在点作切线,可得根的近似值例4.用切线法求方程的实根的近似值,使误差不超过.解:[0,1]是根的一个隔离区间,在[0,1]上f(1)0与同号,所以取=1为迭代初始值.用m语言编出一般的程序如下:f=input('输入函数:f(x)=');n=input('请输入迭代次数:n=');x0=input('请输入迭代初始值:x0=');f1=diff(f);fori=1:nx=x0;fx0=eval(f);f1x0=eval(f1);x0=x0-fx0/f1x0end存为qiexianfa.m,运行结果如下:qiexianfa输入函数:f(x)='x^3+1.1*x^2+0.9*x-1.4'请输入迭代次数:n=6请输入迭代初始值:x0=1x0=0.73770491803279x0=0.67416881167393x0=0.67066757559451x0=0.67065731081384x0=0.67065731072581x0=0.67065731072581