计算方法,二分法实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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值的输出有很大关系,

相关文档
最新文档