38基于牛顿迭代法弦截法和二分法求根.doc
文本预览下载声明
编号: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;
显示全部