当前位置: 代码迷 >> 综合 >> OJ 1150 习题5-14 牛顿迭代法求方程的根
  详细解决方案

OJ 1150 习题5-14 牛顿迭代法求方程的根

热度:94   发布时间:2024-02-01 11:49:31.0

描述

用牛顿迭代法求下面方程在输入初值点附近的根:

2x3-4x2+3x-6=0

要求前后两次求出的x的差的绝对值小于10-6

牛顿迭代法公式如下:

将给定给定方程写成f(x)=0的形式,在给定初值x0的情况下,按如下公式迭代计算:

xn+1=xn-f(x)/f'(x)

提示:C语言数学库中有求指数an的函数pow(a, n)以及求x绝对值的函数fabs(x)

浮点型数据请定义为双精度double类型。


输入
双精度浮点型初值x0

输出
x0附件方程的根,小数点后保留6位小数,末尾换行。

输入样例 1

3
输出样例 1

2.000000

这题就没什么技巧了,明确说明是牛顿迭代法而且还说明了公式,代公式即可公式xn+1=xn-f(x)/f'(x)

#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
using namespace std;
double f(double x)
{return 2*x*x*x-4*x*x+3*x-6;
}
double fD(double x)
{return 6*x*x-8*x+3;
}
double dothat(int x)
{while(fabs(f(x))>0.0000001){x=x-(f(x)/fD(x));}return x;
}
int main()
{double x;while(cin>>x)printf("%.6lf\n",dothat(x));return 0;
}