浙江大学城市学院实验报告课程名称科学计算实验项目名称一元非线性方程的解法实验成绩指导老师(签名)日期一.实验目的和要求1.用Matlab软件掌握求解非线性方程的二分法、迭代法和牛顿法,并对结果作初步分析;2.通过实例练习用非线性方程求解实际问题。二.实验内容和原理分析应用题2-1,2-2,2-3,2-4,2-5要求将问题的分析过程、Matlab源程序和运行结果和结果的解释、算法的分析写在实验报告上。2-1程序注释对用二分法、迭代法和牛顿法求一元非线性方程数值解的Matlab程序的每一句添上注释。二分法:[x,n]=BisectionMethod(a,b,f,epsi,Nmax)迭代法:[x,n]=IterationMethod(x0,g,epsi,Nmax)Newton法:[x,n]=NewtonMethod(x0,f,epsi,Nmax)2-2分析应用题用二分法求方程2()sin04xfxx和()sin0xgxex根的近似值,使误差不超过210,输出每次二分之后解的近似结果以及二分的次数,其中()0gx的根只需求最接近原点的那个根。2-3分析应用题已知方程230xxe有以下三种迭代格式,分析三种迭代格式的收敛性,求出迭代精度为610的数值结果,并比较迭代序列的收敛速度。1)13nxnex2)12lnln3nnxx3)136nnxnnnxnxexxxe2-4分析应用题用下列方法求方程1020xex的近似根,要求误差不超过31102,并比较计算量。1)在区间[0,1]上用二分法;2)取初值0x,并用迭代过程12(0,1,2,.......)10kxkexk;3)取初值00x用牛顿法求解。2-5分析应用题以定期存储为基础的储蓄帐户的累积值可由定期年金方程确定[(1)1]nPAii在这个方程中,A是帐户中的数额,P是定期存储的数额,i是n个存储期间的每期利率。一个工程师想在20年后退休时储蓄帐户上的数额达到750000美元,而为了达到这个目标,他每个月能存1500美元。为实现他的储值目标,最小利率应是多少?假定利息是月复利的。选做题试用Newton迭代法分别求解方程(1)0,3,6,12mxm,取迭代初始值01.5x,要求误差不超过510,观察迭代序列的收敛情况,分析所发生的现象。能否改造Newton法使得它收敛更快?三.操作方法与实验步骤(包括实验数据记录和处理)1.(1)以y=x.^2-3*x+2-exp(x)为例1)二分法(文件名:bisect.m)a)function[R]=bisect(f,a,b,e1,n)%f要求根函数名%a初试有根区间最小值%b初试有根区间最大值%e精度%n迭代次数k=0;fb=feval_r(f,b);fa=feval_r(f,a);x=(a+b)/2;fx=feval_r(f,x);whileabs(a-b)e1&knk=k+1;disp([k,x,fx,abs(a-b)]);%显示迭代过程iffx*fa0b=x;fb=fx;elsea=x;fa=fx;endx=(a+b)/2;fx=feval_r(f,x);endR=x;b)二分法、牛顿法所需用的原函数(文件名Myfun.m:)function[y]=myfun(x)y=x.^2-3*x+2-exp(x)(2)普通迭代法(文件名:DieDai.m)a)function[R]=DieDai(g,x1,N,e)%普通迭代法%g要求根函数名%x1迭代初值%N迭代最大次数%e精度k=0;x2=feval_r(g,x1);whileabs(x2-x1)e&kNk=k+1;disp([k,x1,x2,abs(x1-x2)]);显示迭代过程%x1=x2;x2=feval_r(g,x1);endR=x2;ifk==Nerror('error');%所需迭代已达到endb)实现定点迭代法所需用的函数(文件名:myfun1.m)function[y]=myfun1(x)%要求的函数方程y=(x.^2+2-exp(x))/3(3)3)牛顿法(文件名:Newton.m)a)function[R]=newton(g,dg,x0,n,e)%牛顿法%g要求根函数名%dg要求根函数的导函数名%x0初值%e精度%n迭代次数x1=x0-feval_r(g,x0)/feval_r(dg,x0);k=0;whilekn&abs(x1-x0)e;k=k+1;iffeval_r(dg,x0)==0error(error);%导函数为0程序停止elsedisp([k,x1,x0,abs(x1-x0)]);%显示迭代过程x0=x1;x1=x0-feval_r(g,x0)/feval_r(dg,x0);endendendb)牛顿法所需用的原函数的导函数(文件名:Dmyfun.m)function[y]=dmyfun(x)y=2*x-3-exp(x);2.(1)function[c,err,yc,k]=erfen(f,a,b,delta)ya=feval(f,a);yb=feval(f,b);ifya*yb0,endmax1=1+round((log(b-a)-log(delta))/log(2));fork=1:max1c=(a+b)/2;yc=feval(f,c);ifyc==0a=c;b=c;elseifyb*yc0b=c;yb=yc;elsea=c;ya=yc;endk=k+1;ifb-adelta,break,endendc=(a+b)/2;err=abs(a-b);yc=feval(f,c);endfunctionf=f(x)f=sin(x)-x^2/4[c,err,yc,k]=erfen('f',1,2,0.01)f=0.5915f=-0.0907f=0.4350f=0.2184f=0.0752f=-0.0050f=0.0358f=0.0156f=0.0054f=2.1151e-004c=1.9336err=0.0078yc=2.1151e-004k=8(2)functionf=f(x)f=exp(x)-sin(x)end[c,err,yc,k]=erfen('f',-0.1,0.1,0.01)f=1.0047f=1.0053f=1f=1.0012f=1.0027f=1.0036f=1.0041f=1.0044c=-0.0969err=0.0063yc=1.0044k=63.(1)iterate(1)n=15x1=0.910008268542615ans=0.910008268542615(2)iterate(1)n=28x1=3.733077922447989ans=3.733077922447989(3)[p0,err,k,y]=newton('f','df',1,10^-6,10^-8,100)p0=0.910007572548888err=1.009323451761635e-005k=3y=1.790749770691491e-0104.(1)[c,err,yc,k]=erfen('f',0,1,5*10^-4)c=0.090576171875000err=4.882812500000000e-004yc=5.666165574387261e-004k=12(2)iterate(0)n=4x1=0.090512616674365(3)[p0,err,k,y]=newton('f','df',0,0.0005,5*10^-6,100)p0=0.090525108583390err=3.839823257013320e-004k=2y=8.072688695293095e-0085.240150075000011xi即240()(1)5001fxxx239240(1)500dfi[p0,err,k,y]=newton('f','df',1,0.0005,5*10^-6,100000)p0=0.005555938110707err=1.374794598648418e-004k=168y=0.002070961751574最小利率p0=0.0055559381107076.m=3;[p0,err,k,y]=newton('f','df',1.5,0.00005,5*10^-6,100000)p0=1.013006147436874err=0.006503073718437k=9y=2.200118224575832e-006m=6[p0,err,k,y]=newton('f','df',1.5,0.00005,5*10^-6,100000)p0=1.116284019680689err=0.023256803936138k=8y=2.472408430136375e-006m=12[p0,err,k,y]=newton('f','df',1.5,0.00005,5*10^-6,100000)p0=1.353033371913580err=0.032093942901235k=4y=3.747909791847344e-006四.实验结果与分析