您的位置:首页 > 其它

第十一周OJ(6)牛顿迭代公式

2016-11-26 14:59 651 查看
*\

烟台大学计算机与控制工程学院

All rights reserved.

作者:汪莹莉

完成日期:2016年11月26日

题目描述

用牛顿迭代法求根。方程为ax3+bx2+cx+d=0。系数a,b,c,d的值一次为1,2,3,4,

由主函数输入。求x在1附近的一个实根。求出根后由主函数输出。结果保留两

位小数。

输入

系数a,b,c,d的值

输出

x在1附近的一个实根

样例输入

1 2 3 4

样例输出

-1.65

主函数已给定如下,提交时不需要包含下述主函数

/* C代码 */

int main()

{

 double solut(double ,double ,double ,double );

 double a,b,c,d;

 scanf("%lf%lf%lf%lf",&a,&b,&c,&d);

 printf("%.2f",solut(a,b,c,d));;

 return 0;

}

/* C++代码 */

int main()

{

 double solut(double ,double ,double ,double );

 double a,b,c,d;

 cin>>a>>b>>c>>d;

 cout<<setiosflags(ios::fixed);

 cout<<setprecision(2); 

 cout<<solut(a,b,c,d)<<endl;

 return 0;

}

编译程序:


#include<stdio.h>

#include<math.h>

int main()

{

    double solut(double,double,double,double );

    double a,b,c,d;

    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);

    printf("%.2f",solut(a,b,c,d));;

    return 0;

}

double solut(double a,double b,double c,double d)

{

    double x,x0;

double x=1;//求在几周围的实根

    do

    {

        x0=x;

        x=x0-(((a*x+b)*x+c)*x+d)/((3*a*x+2*b)*x+c);

    }

    while(fabs(x-x0)>=1e-5);//函数fabs求x的绝对值,计算|x|, 当x不为负时返回 x,否则返回 -x      

    return x;

}

运行结果:



知识点总结;牛顿迭代法,也称牛顿切线法:先任意设定一个与真实的根接近的值x0作为第一次近似根,由x0求出f(x0),过(x0,f(x0))点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),过(x1,f(x1))点做f(x)的切线,交x轴于x2,……如此继续下去,直到足够接近(比如|x- x0|<1e-6时)真正的根x*为止。

而f '(x0)=f(x0)/( x1- x0)  

所以 x1= x0- f(x0)/ f ' (x0)。

牛顿迭代公式:x0-f(x0)/f'(x0)>=x1;

学习心得:明确什么是牛顿迭代公式,并且掌握运算公式


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