文档详情

38基于牛顿迭代法弦截法和二分法求根.doc

发布:2017-04-20约5.98千字共9页下载文档
文本预览下载声明
编号:38 PAGE  第 PAGE 9页/共 NUMPAGES 9 页 ·河北工业大学计算机软件技术基础(VC)2013年课程设计报告 学院 班级 姓名 学号 成绩____ 一、题目: 基于牛顿迭代法、弦截法和二分法求根(38) 二、设计思路 1、总体设计 分析程序的功能 用户输入x0,计算机显示牛顿迭代法计算的值,用户输入x的范围,输出二分法和弦截法的计算值,并计算出各种方法的迭代次数,输出最小的迭代次数。 系统总体结构: 每一次运算的过程可以由这几部分完成:用户输入x初值,计算牛顿迭代法的值并输出,用户输入x的范围,计算二分法和弦截法的值并输出结果,总共五个步骤: 模块函数名称用户输入x初值main计算牛顿迭代法的值并输出nt用户输入x的范围main计算二分法half弦截法chord迭代次数cishu对于每一次运行,关注的数据有四个:x的初值,x的范围,x范围的函数值,x的迭代次数。 2、各功能模块的设计:说明各功能模块的实现方法 1)main模块 该函数无返回值。要实现的功能是询问x初值,输出牛顿迭代法的计算值,询问x的范围,输出二分法和弦截法的计算值。 代码参见main函数。 2)f模块 该函数返回x的给定公式函数值。 代码参见f函数。 3)f1模块 该函数返回给定公式的导数的函数值。 代码参见f1函数。 4) nt模块 主要使用for函数,判断是否满足精度要求,实现语句循环,使该函数返回牛顿迭代法的计算根。 代码参见nt函数。 5)half模块 使用for函数,判断是否满足精度要求,使用if函数判断是否异号,实现语句循环,使该函数返回二分法计算的根。 代码参见half函数。 6)chord模块 使用for函数,判断是否满足精度要求,使用if函数判断是否异号,实现语句循环,使该函数返回弦截法的计算值。 代码参见chord函数。 7)cishu模块 主要使用break,判断是否跳出循环,该函数返回迭代次数的函数值。 代码参见cishu函数 3、设计中的主要困难及解决方案 二分法和弦截法函数处,区间的取舍有困难。 对公示的理解不到位,常常使计算结果误差很大,甚至得不到正确结果。 4、你所设计的程序最终完成的功能 说明你编制的程序能完成的功能 能够使用户输入x初值和x的范围,计算牛顿迭代法和二分法以及弦截法的正确计算值,而且可以计算出函数的迭代次数,并输出最小迭代次数。 准备的测试数据及运行结果 X0=0.5 范围(-1,1) 三、程序清单 1)main函数 void main() { while(1) //使函数一直运行 { cout\n牛顿迭代法endl; cout请输入x0:; cina; nt(); cout\n二分法 弦截法求根endl; cout请输入根所在的范围:; cinbc; half(); chord(); cishu(); } }2)f(double x)函数 double f(double x) //给定公式 { return (x*x*x-2*x*x+7*x+4); } 3)f1(double x)函数 double f1(double x) //求导 { return (3*x*x-4*x+7); } 4)nt(double a)函数 void nt() //牛顿迭代法 { double x0,x=a; for(int i=0;(fabs(x-x0))1e-6;i++) //判断是否满足精度 { x0=x; x=x0-f(x)/f1(x); //牛顿法公式 } nn=i; cout牛顿迭代法的结果为:x次数是nnendl; }5)half(double b,double c)函数 void half() //二分法 { double x0,x1,x2; x1=b; x2=c; for(int i=0;(fabs(x1-x2))1e-6;i++) //判断是否满足精度 { x0=(x1+x2)/2;
显示全部
相似文档