您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 计算方法实验二非线性方程求根实验报告
实验报告学院:电子信息工程实验课程:计算方法学生姓名:学号:专业班级:通信工程实验二非线性方程求根1目的与要求(1)进一步熟练掌握求解非线性方程的二分法与Newton迭代法。(2)掌握二分法与Newton迭代法的算法,能运用程序设计语言和此方法编制软件求出任意指定一元三次方程在给定点附近的根。2实验内容用二分法和Newton迭代法求方程310xx在1.5附近的根,精确到310,输出每次的迭代结果并统计所用的迭代次数。3实验原理(1)二分法实验原理取[a,b]区间二等分的中点x1=(a+b)/2(1)若f(x1)=0,则x1是f(x)=0的实根。(2)若f(a)f(x1)0成立,则x*必在区间(a,x1)内,取a1=a,b1=x1;否则x*必在区间(x1,b)内,则取a1=x1,b1=b,这样,得到新区间[a1,b1],其长度为[a,b]的一半。(3)如此继续下去,进行n次等分(2)Newton迭代法实验原理4程序设计(1)流程图二分法程序流程图Newton迭代法程序流程图(2)程序代码①二分法求非线性方程根#includestdio.h#includemath.hdoublefun1(doublex){returnx*x*x-x-1;}doublefun2(doublex1,doublex2){return(x1+x2)/2;}main(){intn=1;floata,b,c;printf(二分法求非线性方程的根\n);scanf(a=%f,b=%f,&a,&b);if(fun1(a)*fun1(b)0){while(fabs(b-a)1e-3){c=fun2(a,b);if(fun1(a)*fun1(c)0){b=c;}elseif(fun1(c)*fun1(b)0){a=c;}else{break;}printf(当前计算次数为%d计算结果为%lf\n,n,fun2(a,b));n++;}}else{printf(不符合二分法使用条件,请重新输入:\n);}}②Newton迭代法#includestdio.h#includemath.hdoublefun1(doublex){returnx*x*x-x-1;}doublefun2(doublex){return3*x*x-1;}doubleroot(doublenum){doublex1,x0;intn=1;x0=num;if(fun2(x0)==0){printf(Algorithmfailed.Exit!);}else{x1=x0-fun1(x0)/fun2(x0);printf(Newton迭代法求根\n);}while(fabs(x1-x0)1e-3){printf(当前计算次数为%d计算结果为%lf\n,n,x1);x0=x1;x1=x0-fun1(x0)/fun2(x0);n++;}}main(){root(1.5);}5实验结果与分析(1)二分法求根结果界面(2)Newton迭代法求根结果界面分析:(1)本次试验两种算法均采用了while循环及if-else判断语句,编程函数并由主函数调用,较简单的实现了二分法与Newton迭代法的编程任务。(2)由本次试验结果来看,同等精度条件下,Newton迭代法收敛快,稳定好,计算次数少,是求解非线性方程根的有效方法。但是同时可以看出二分法具有计算简单,程序容易实现,可在大范围内求根的特点。(3)此次试验较好的完成了任务,巩固了课堂知识。
本文标题:计算方法实验二非线性方程求根实验报告
链接地址:https://www.777doc.com/doc-5712091 .html