数值分析实验五(二分法,牛顿迭代法)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五
一、实验目的与要求:
1、通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点;
2、比较二者的计算速度和计算精度。
二、实验内容:
通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点。
二分法
算法:给定区间[a,b],并设与符号相反,取为根的容许误差,为的容许误差。
(1)令c=(a+b)/2
(2)如果(c-a)<或,则输出,结束;否则执行(3)
(3)如果,则令;否则则令,重复(1),(2),(3)。
牛顿迭代法
算法:给定初值 , 为根的容许误差,为 的容许误差,N 为
迭代次数的容许值。
(1)如果 =0或迭代次数大于N ,则算法失败,结束;否则执行
(2)。
(2)计算 = - (3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。
x 0εη)(x f )('
x f x 1x 0)()('0x x o f f x x 01-ε)(1x f ηx 1
x0x1
(4)令= ,转向(1)。
三、实验题目:
1、用二分法求方程f(x)=x^3+4*x*x-10在区间[1,1.5]上的根,要求求出具有3位有效数的近似根。
2、用牛顿法求方程x^3-3x-1=0在x=2附近的根。
四、程序:
一、二分法
#include
float f(float x)
{
return x*x*x+4*x*x-10;
}
void main()
{
float a,b,c;
a=1.0;
b=1.5;
for(;b-a>=0.01;)
{
c=(a+b)/2;
if(f(a)*f(c)==0)
break;
else if(f(a)*f(c)<0)
b=c;
else
a=c;
}
printf("方程的近似根为%f\n",c);
printf("保留三位有效数字为%0.2f\n",c); }
二、牛顿迭代法
#include
#include
float f(float x)
{
return x*x*x-3*x-1;
}
float g(float x)
{
return 3*x*x-3;
}
void main()
{
float x0,x1,a,b,N;
int i;
i=0;
printf("请输入初值X0,根的容许误差,|f(x)|的容许误差,迭代次数的容许值N。\n");
scanf("%f,%f,%f,%f",&x0,&a,&b,&N);
for(;;)
{
i++;
if(g(x0)==0||i>=N)
break;
else
{
x1=x0-f(x0)/g(x0);
if(fabs(x1-x0) goto end; else x0=x1; } } printf("算法失败,在达到迭代次数时此结果并未达到根的容许误差或|f(x)|的容许误差。\n"); end:printf("%f\n",x1); } 五、实验结果: 1、二分法 2、牛顿迭代法