习题 4.6 用牛顿迭代法求根。方程为ax^3+bx^2+cx+d=0,系数a,b,c,d的值依次为1,2,3,4,由主函数输入。求x在1附近的一个实根。求出根后由主函数输出。

C++程序设计(第三版) 谭浩强 习题4.6 个人设计

用牛顿迭代法求根。方程为
ax3+bx2+cx+d=0 a x 3 + b x 2 + c x + d = 0
,系数a,b,c,d的值依次为1,2,3,4,由主函数输入。求x在1附近的一个实根。求出根后由主函数输出。

根据牛顿迭代法的公式:

xn+1=xnf(xn)f(xn) x n + 1 = x n − f ( x n ) f ′ ( x n )

得到

f(xn)=ax3+bx2+cx+d f ( x n ) = a x 3 + b x 2 + c x + d

f(xn)=3ax2+2bx+c f ′ ( x n ) = 3 a x 2 + 2 b x + c

代码块:

说明:用C语言课后答案稍作改动

#include 
#include 
#include 
using namespace std;
double root(double n, double p, double q, double r, double t);  //定义求根函数
int main()
{
    double x, a, b, c, d;
    cout<<"Please enter coefficient of equation: ";            //输入方程系数和附近值
    cin>>x>>a>>b>>c>>d;
    cout<4);
    cout<<"Result: "<"pause");
    return 0;
}
//求根函数
double root(double n, double p, double q, double r, double t)
{
    double f;
    f=(p*pow(n, 3)+q*pow(n, 2)+r*n+t)/(3*p*pow(n, 2)+2*q*n+r);
    for (int i=0; fabs(f)>1e-5; f=(p*pow(n, 3)+q*pow(n, 2)+r*n+t)/(3*p*pow(n, 2)+2*q*n+r), n-=f, i++);
    return n;
}

你可能感兴趣的:(C++程序设计,(第三版),谭浩强,课后答案)