数值分析报告-二分法和牛顿法方程求根
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);