第六天 牛顿迭代法求方程根

1.问题描述
编写用牛顿迭代法求方程根的函数。方程为ax^3+bx^2+cx+d=0,系数a,b,c,d由主函数输入。求x在1附近的一个实根。求出根后,由主函数输出。

2.问题分析
牛顿迭代法是取x0之后,在这个基础上,找到比x0更接近的方程的根,一步一步迭代,
从而找到更接近方程根的近似根。
设r是f(x)=0的根,选取x作为r初姶近似值。过点(,f())作为曲线y=f(x) 的切线L,L 的方程为y=f()+f((-),求出L与r轴交点的横坐标=x-f(g)fx),称:为r的一次近似值,过点(f())作为曲线y=f(x)的切线,并求该切线与x轴的横坐标x,=L-f()lf),称x为r的二次近似值,重复以上过程,得r的近似值x上述过程即为牛顿迭代法的求解过程。

#include<iostream>
#include<cmath>
using namespace std;
double f(double a) {
if (a > 0) return a;
else return 0 - a;
}
int main() {
double x0 = 1.5;
int a, b, c, d;
cin >> a >> b >> c >> d;
double f0 = a * x0 * x0 * x0 + b * x0 * x0 + c * x0 + d;
double fd = a * 3 * x0 * x0 + 2 * b * x0 + c;
double x = 1;
double h = f0 / fd;
x = x0 - h;
x0 = x;
while (f(x - x0) >= 1e-5) {
f0 = a * x * x * x + b * x * x + c * x + d;
fd = a * 3 * x * x + 2 * b * x + c;
h = f0 / fd;
x = x0 - h;
x0 = x;
}
cout << x;
}

posted @ 2023-04-16 21:38  贾贾鱼  阅读(92)  评论(0)    收藏  举报