二分法实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告方程求根——二分法

一、目的和要求

1)通过对二分法的编程练习,掌握方程求根的二分法的算法;2)通过对二分法的上机运算,进一步体会二分法的特点。

二、实习内容

1)二分法的编程实现。

2)进行有根区间和误差限的比较和讨论。

三、算法

流程图:

1)准备:计算f(x)在有根区间[a, b]端点处的值f(a), f(b)。

2)二分:计算f(x)在区间中点c=

2b

a

处的函数值f(c)。3)判断

•若f(c)与f(a)异号,则根位于区间[a, c]内,以c代替b;•若f(c)与f(a)同号,则根位于区间[c, b]内,以c代替a;

四、实验步骤

1)完成二分法的程序设计及录入;

2)完成程序的编译和链接,并进行修改;

3)用书上的例子对程序进行验证,并进行修改;4)对比估算次数与实际二分次数;

5)输入不同的区间初值a, b,查看二分次数的变化;6)输入不同的误差限,查看二分次数的变化;

7)完成实验报告。

五、实验结果

1.经编译、链接及例子验证结果正确的源程序:

#include

#include

float f(float x);

void main()

{

float a,b,c,EPS,DELTA,fa,fb,fc,fab;

int i=1;

printf("please input a,b,EPS,DELTA\n");

scanf("%f%f%f%f",&a,&b,&EPS,&DELTA);

fa=f(a);

fb=f(b);

fab=fa*fb;

if(fab>0)

printf("无根");

while(fab<0)

{

c=(a+b)/2;

fc=f(c);

if((fa*fc)<0)

{

b=c;

fb=fc;

printf("%d %20f %20f\n",i,c,fc);

i++;

}

else if((fb*fc)<0)

{

a=c;

fa=fc;

printf("%d %20f %20f\n",i,c,fc);

i++;

}

if( fabs(fc)

{

printf("输出c为:%f\n",c);

break;

}

}

}

float f(float x)

{

float f;

f=x*x*x+x*x-3*x-3;

return f;

}

2. 实例验证结果:

1)方程:f(x)=x3+x2-3x-3=0

2)输入初始参数:a=1, b=2, EPS=5e-6

3)结果输出:

3. 改变a, b的值为:a=0, b=2, EPS不变,仍为5e-6,其结果为:

4. 改变EPS的值为:EPS=5e-4, a, b不变,仍为a=1, b=2,其结果为:

六、分析和讨论

1.估算次数与实际二分次数的分析和讨论

估算次数总是比实际二分次数少一次。

2.输入不同的区间初值a, b,二分次数的变化情况

输入不同的区间初值a, b,二分次数会有明显的变化,比如输入为a=1,b=2是实际循环18次,

输入a=0,b=2时,实际循环次数19次。

3.输入不同的误差限EPS,二分次数的变化情况

输入不同的误差限EPS时二分次数变化较大,同样的二分区间,当精度提高100时,循环次数增加了8次。

七、心得

①调试过程中遇到的问题和解决对策;②经验体会等。

虽然遇到不少困难,不过还是做出来了。哈哈哈

相关文档
最新文档