数值分析报告-二分法和牛顿法方程求根

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

《数值分析》实验报告一

**: **

学号: PB********

实验一

一、实验名称

方程求根

二、实验目的与要求:

通过对二分法和牛顿法作编程练习和上机运算,进一步体会它们

在方程求根中的不同特点;

比较二者的计算速度和计算精度。

三、实验内容:

通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会

它们在方程求根中的不同特点 。

(一)二分法

算法:给定区间[a,b],并设f (a )与f (b )符号相反,取δ为

根的容许误差,ε为值的容许误差。

(1)令c=(a+b)/2

(2)如果(c-a)< δ或)(c f <ε,则输出c ,结束;否则执行(3)

(3)如果f(a)f(c)<0,则令)()(,c f b f c b ←←;否则,则令

)()(,c f a f c a ←←,重复(1),(2),(3)。

(二)牛顿迭代法:给定初值0x ,ε为根的容许误差,η为)(x f 的容

许误差,N 为迭代次数的容许值。

(1)如果)(x f <η或迭代次数大于N ,则算法结束;否则执行(2)。

(2)计算)('/)(0001x f x f x x -=

(3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。

(4)令 = ,转向(1)。

四、实验题目与程序设计

1、二分法

3.1.1、用二分法求方程

a. f(x)= x x tan 1--在区间[0,π/2]上的根,

c. f(x)=6cos 22-++-x e x x 在区间[1,3]上的根。

源程序:

3.1.1.a

#include

#include

void main()

{

float a,b;double c,y,z;

printf("plese input two number a and b:\n");

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

c=(a+b)/2;

y=1/c-tan(c);

printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y);

while(fabs(b-a)>0.00001|| fabs(y)>0.00001)

{

z=1/a-tan(a);

if(z*y<0)

b=c;

else

a=c;

c=(a+b)/2;

y=1/c-tan(c);

printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y);

}

x x 01-ε)(1x f ηx 1x 0x 1

}

输入0 1.5707563( /2~1.5705563)

得到下表:

由上表可以看出刚开始时f(c)取值幅度很大,但是经过一段历程之后,幅度变得平缓甚至基本接近与零,我们认为,x=0.8603是方程的根,结果与实际想要得到的值相当接近。

3.1.1 c

#include

#include

void main()

{ float a,b;double c,y,z;

printf("plese input two number a and b:\n");

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

c=(a+b)/2;

y=pow(2,-c)+exp(c)+2*cos(c)-6;

printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y);

while(fabs(b-a)>0.00001 || fabs(y)>0.00001)

{

z=pow(2,-a)+exp(a)+2*cos(a)-6;

if(z*y<0)

b=c;

else

a=c;

c=(a+b)/2;

y=pow(2,-c)+exp(c)+2*cos(c)-6;

printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y);

}

}

输入1 3 ,得到如下表:

我们认为,x=1.8294是方程的根。

3.1.4、用二分法求方程

04032010958411812467284224494536546362345678=+-+-+-+-x x x x x x x x 在[5.5,6.5]上的根,将-36改为-36.001,并重复试验。

源程序如下:

#include

#include

void main()

{

float a,b,c,y,z,w;int n=0;

printf("plese input two number a and b:\n");

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

c=(a+b)/2;

y=pow(c,8)-36*pow(c,7)+546*pow(c,6)-4536*pow(c,5)+22449*pow(c,4)-67284*pow(c,3)+118124*c*c-109584*c+40320;

printf(" a b b-a c f(a) f(c) f(b)\n");

printf("%f,%f,%f,%f,%f,%f,%f\n",a,b,b-a,c,z,y,w);

相关文档
最新文档