1、实验二 非线性方程求根实验报告 实 验 报 告学 院: 电子信息工程 实验课程: 计算方法 学生姓名: 学 号: 专业班级: 通信工程 实验二 非线性方程求根1 目的与要求(1)进一步熟练掌握求解非线性方程的二分法与Newton迭代法。(2)掌握二分法与Newton迭代法的算法,能运用程序设计语言和此方法编制软件求出任意指定一元三次方程在给定点附近的根。2 实验内容用二分法和Newton迭代法求方程在1.5 附近的根,精确到,输出每次的迭代结果并统计所用的迭代次数。3 实验原理(1)二分法实验原理取a,b区间二等分的中点x1 =(a+b)/2(1)若f(x1)=0,则x1是f(x)=0的实根。
2、(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)程序代码二分法求非线性方程根#include#includedouble fun1(double x) return x*x*x-x-1;double fun2(double x1,double x2) return (x1+x2)/2; main()
3、 int n=1; float a,b,c; printf(二分法求非线性方程的根n); scanf(a=%f,b=%f,&a,&b); if (fun1(a)*fun1(b)1e-3) c=fun2(a,b); if (fun1(a)*fun1(c)0) b=c; else if (fun1(c)*fun1(b)0) a=c; else break; printf(当前计算次数为%d 计算结果为%lfn,n,fun2(a,b); n+; else printf(不符合二分法使用条件,请重新输入:n); Newton迭代法#include#includedouble fun1(double x
4、) return x*x*x-x-1;double fun2(double x) return 3*x*x-1;double root(double num) double x1,x0; int n=1; x0=num; if (fun2(x0)=0) printf(Algorithm failed. Exit !); else x1=x0-fun1(x0)/fun2(x0); printf(Newton迭代法求根n); while (fabs(x1-x0)1e-3) printf(当前计算次数为%d 计算结果为%lfn,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)此次试验较好的完成了任务,巩固了课堂知识。