您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 数值分析实验四(金)
实验名称:实验四方程求根指导教师:数值分析实验组实验时数:2实验设备:安装了Matlab、C++、VF软件的计算机实验日期:2014年月日实验地点:第五教学楼北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)的结果进行比较。说明:实验过程应包括对问题的简要分析、求解方法、求解步骤、程序及其必要的图表等内容。实验过程:C题二分法:function[x,k]=demimethod(a,b,f,eps)%a,b表示求解区间[a,b]的端点%f表示所求方程函数名%eps是精度指标%x表示所求近似解%k表示循环次数fa=feval(f,a);fab=feval(f,(a+b)/2);k=0;whileabs(b-a)epsiffab==0x=(a+b)/2;return;elseiffa*fab0b=(a+b)/2;elsea=(a+b)/2;endfa=feval(f,a);fab=feval(f,(a+b)/2);k=k+1;endx=(a+b)/2;在MATLAB命令窗口中输入下列命令:f=@(x)x^3+2*x^2+10*x-20;[x0,k]=demimethod(1,2,f,10^-9)求得结果如下:x0=1.3688k=30Newton迭代法:functionroot=NewtonRoot(f,a,b,eps)formatlongif(nargin==3)eps=1.0e-5;endf1=subs(sym(f),findsym(sym(f)),a);f2=subs(sym(f),findsym(sym(f)),b);if(f1==0)root=a;endif(f2==0)root=b;endtol=1;fun=diff(sym(f));%求导数fa=subs(sym(f),findsym(sym(f)),a);fb=subs(sym(f),findsym(sym(f)),b);dfa=subs(sym(fun),findsym(sym(fun)),a);dfb=subs(sym(fun),findsym(sym(fun)),b);if(dfadfb)%初始值取两端点导数较大者root=a-fa/dfa;elseroot=b-fb/dfb;endwhile(toleps)r1=root;fx=subs(sym(f),findsym(sym(f)),r1);dfx=subs(sym(fun),findsym(sym(fun)),r1);%求该点的导数值root=r1-fx/dfx;%迭代的核心公式tol=abs(root-r1);end在MATLAB命令窗口下输入下列命令:r=NewtonRoot(‘x^3+2*x^2+10*x-20’,1,2)得到结果如下:r=1.36880810782137实验总结(由学生填写):由牛顿法求解精度相对于二分法更加精确点
本文标题:数值分析实验四(金)
链接地址:https://www.777doc.com/doc-2387476 .html