实验名称:实验四方程求根指导教师:数值分析实验组实验时数:2实验设备:安装了Matlab、C++、VF软件的计算机实验日期:2015年11月10日实验地点:第五教学楼北802或902实验目的:1.掌握非线性方程数值解法的基本思想和基本步骤。2.理解各类数值方法的优缺点,并能自行编程求解。3.初步了解非线性方程的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,体会不同初值对同一迭代函数的影响。实验准备:1.在开始本实验之前,请回顾教科书的相关内容;2.需要一台准备安装WindowsXPProfessional操作系统和装有数学软件的计算机。实验内容及要求A题求非线性方程0232xexx的根,准确到106。(1)请自行设计一种线性收敛的迭代法求方程的根,输出迭代初值、各次迭代值及迭代次数。(2)用牛顿迭代法求方程的根,输出迭代初值、各次迭代值及迭代次数,并与(1)的结果比较。(3)用MATLAB内部函数solve直接求出方程的所有根,并与(1)、(2)的结果进行比较。B题求方程013xx在x=1.5附近的根。(1)对牛顿迭代公式:131231kkkkkxxxxx,编写程序进行实验,分别取00x,5.10x迭代10次,观察比较其计算值,并分析原因。(2)用MATLAB内部函数solve直接求出方程的所有根,并与(1)的结果进行比较。C题公元1225年,Lenardo宣布他求得方程32210200xxx的一个根1.368808107x,当时颇为轰动,但无人知道他是用什么方法得到的。现在,请你试试用二分法和Newton迭代法求解上述方程能否得到这个结果。D题用简单迭代法求方程012)(3xxxf的根。方案一:化012)(3xxxf为等价方程)(213xxx方案二:化012)(3xxxf为等价方程)(123xxx(1)分别对方案一、方案二取初值00x,迭代10次,观察其计算值,并加以分析。(2)用MATLAB内部函数solve直接求出方程的所有根,并与(1)的结果进行比较。说明:实验过程应包括对问题的简要分析、求解方法、求解步骤、程序及其必要的图表等内容。实验过程:实验选题:A题问题一:对方程变形处理0232xexx232xxex32xxex即迭代函数为:3(2)xexx132kxkkxex设*limkkxx,由于11*2*31lim22kxkkpkkkexexxxe,故该迭代函数是线性收敛的。利用Matlab编程计算:(取初值为0.2;精度为610)程序功能:线性迭代函数求根clear,clcx0=0.2%定义初值e=10^-6;%定义精度为10的-6次方N=500;%最大迭代次数k=0;%迭代次数whilekNx1=sqrt(3*x0+exp(x0)-2);%x1=log(x0^2-3*x0+2);%x1=exp(x0)/(x0-2)+1;%x1=x0+(4+sqrt(16-4*(x0^2+2)))/2;%x1=x0^2-2*x0+2-exp(x0);ifabs(x1-x0)ebreakendx0=x1;k=k+1;endkx1得到结果为:初值迭代次数迭代结果0x=0.200k=651x=2.0844+2.7330i结果检验:将迭代结果1x代入原方程0232xexx,在Matlab命令窗口输入:abs(x1^2-3*x1+2-exp(x1)),得到5.1676e-006,结果非常接近0,比较可靠。问题二:牛顿法公式:1(),0,1,'()kkfxxxkfx带入得到迭代格式为213223kkxkkkkxkxxexxxe利用Matlab编程计算:(取初值为0.2;精度为610)程序功能:牛顿法迭代clear,clcx0=0.2%定义初值e=10^-6;%定义精度为10的-6次方N=500;%最大迭代次数k=0;%迭代次数f=inline('x^2-3*x+2-exp(x)')%取a=27为例df=inline('2*x-3-exp(x)')whilekNx1=x0-feval(f,x0)/feval(df,x0);ifabs(x1-x0)ebreakendx0=x1;k=k+1;endkx1得到结果初值迭代次数迭代结果0x=0.200k=21x=0.2575与1问结果进行比较:0x=0.200k=651x=2.0844+2.7330i相比之下,牛顿法初值不变,迭代次数大大减少,结果更为精确。问题三:用MATLAB内部函数solve直接求出方程的所有根,在命令窗口输入solve('x^2-3*x+2-exp(x)','x')得到结果0.25753028543986076045536730493724结果比较:求出的结果与牛顿法求出的结果基本一致。实验总结(由学生填写):通过这次实验,我学会了非线性方程数值解法的基本思想和步骤,能自行编写迭代程序进行计算,了解了迭代方法的优缺点。