二分法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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次。 七、心得 ①调试过程中遇到的问题和解决对策;②经验体会等。 虽然遇到不少困难,不过还是做出来了。哈哈哈