计算方法,二分法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告 ___二分法
班级:2007060101 学号:200706010103 姓名:严伟一、实验目的
目的: 通过对二分法的编程练习与上机运算,进一步体会二分法的特点;
二、实验内容要求
内容要求: ①要求可随机输入区间[a,b]的值执行程序,算出误差限的值.
②讨论a,b变化时,二分次数的变化;
误差限变化时二分次数的变化;
估算的次数与实际二分次数的符合情况;
三、流程图
四、算法
①给定区间[a,b],并设f(a)与f(b)符合相反,取ε为根的容许误差, δ为|f(x)|的容许误差.
令c=(a+b)/2 .
②如果(c-a)< ε或|f(c)|<δ,则输出C,结束;否则执行③.
③如果f(a)*f(b)>0, 则根位于区间[a, c]内,以c代替b; f(a)*f(b)< 0则根位于区间[c,
b]内,以c代替a;重复①,②,③.直到区间[a, b]长度缩小到允许误差范围之内或
f(c)=0,此时区间中点c即可作为所求的根。
五、实验结果
应用方程:f(x)=x3+x2-3x-3=0
⑴编写c语言程序如下:
#include
#include
#define eps 5e-4
#define delta 1e-6
float f(float x)
{
return x*x*x+x*x-3*x-3;
}
void main()
{
float a,b,c;
int k;
float fa,fb,fc;
int n=1;
scanf("%f,%f",&a,&b);
printf("a=%f b=%f\n",a,b);
k=(log(b-a)-log(eps))/log(2.0);
printf("k=%d\n",k);
fa=f(a);
fb=f(b);
do
{
if(fa*fb>0)
{
printf("无解");
break;
}
else
{
c=(a+b)/2;
fc=f(c);
if(fabs(fc) if(fa*fc<0) { b=c; fb=fc; } if(fb*fc<0) { a=c; fa=fc; } if((b-a) } printf("%d %f %f\n",n,c,fc); n++; } while(n=k ); } ⑵实例验证结果: ①输入初始参数:a=1, b=2, EPS=5e-6 ; 其结果为: ②改变a, b的值为:a=0, b=2, EPS不变,仍为5e-6, 其结果为: ③改变EPS的值为:EPS=5e-4, a, b不变,仍为a=1, b=2, 其结果为: 六、估算次数与实际二分次数的分析和讨论 I. 输入不同的区间初值a, b,二分次数的变化情况 答:输入的区间范围越大,要达到相同的精确值,二分次数K会相应的增加。 II. 输入不同的误差限ε,二分次数的变化情况 答:随着误差限ε的增大,二分次数会相应的减少。 III. 估算的次数与实际二分次数的符合情况 答:估算的次数与实际二分次数相等,即估算好多次,就二分了好多次. 七、心得 通过二分计算在电脑中的演示更一步了解了二分法的特点: 用对分区间的方法根据分点处函数f(x)值的符号逐步将有根区间缩小,使在足够小的区间内,方程有且仅有一个根. 二分法收敛速度较慢,在编程过程中,对变量的定义采用哪种类型,主要是对条件的判断做准确分析,对中断条件的准确把握,在调试过程中,对k值采用哪种类型的定义。对k值的输出有很大关系,