您的位置:首页 > 其它

牛顿迭代法和二分法求方程的根

2017-12-04 19:24 337 查看
使用牛顿迭代法(在1.5附近)和二分法(在(-10,10)区间内)求2*x*x*x-4*x*x+3*x-6=0的根

牛顿迭代法:

算法分析:假设方程f(x)=0,在x0附近有一个根,那么用xn+1=xn-f(xn)/f’(xn)。依次计算x1,x2,x3,…………,那么这个序列无限逼近方程的根。原理是根据f(x)在x0附近的值和斜率,估计f(x)和x轴的交点。



#include<stdio.h>
int main()
{
double x=1.5;
double fx,f1x,eps=0.00001;
do
{
fx=2*x*x*x-4*x*x+3*x-6;
f1x=6*x*x-8*x+3;
x=x-fx/f1x;
if(fx<0)fx=-fx;
if(fx<eps)break;
}while(1>0);
printf("%lf",x);
return 0;
}


二分法:

算法分析:对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法。

#include<stdio.h>
int main()
{
double l=-10.0,h=10.0;     //划定区间,默认函数在-10出取负值,在10处取正值
double m,fm,eps=0.000001;  //规定逼近值eps
do
{
m=(l+h)/2;         //找到区间中点
fm=2*m*m*m-4*m*m+3*m-6;    //计算区间中点函数值
if(fm<0)l=m;       //如果区间中点函数值为负值,将区间最小端点赋为区间中点
else h=m;          //如果区间中点函数值为正值,将区间最大端点赋为区间中点
if(fm<0)fm=-fm;    //如果函数值为负值化为正值便于和eps比较,此处和上述任何一个步骤无关
if(fm<eps)break;   //如果函数值趋近与eps,即得到根m
}while(1);
printf("%lf",m)
return 0;
}

91b1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: