牛顿迭代法(Newton’s Method)又称 牛顿-拉夫森方法(Newton-Raphson Method),是一种用于求解实数或复数函数零点(根)的数值分析方法。该方法通过不断迭代逼近方程的解,通常收敛非常迅速,特别是当初始猜测值接近真实解时。
牛顿迭代法的基本思想是利用函数的泰勒展开式的线性近似来不断逼近零点。
假设有一个函数 ,要找到 的 值。
如果 是当前的近似值,那么牛顿迭代法给出的下一步近似值 则可以通过以下公式计算:
其中, 是 函数 在 处的值。
是 函数 在 处的导数值。
几何意义: 点做切线,与 轴的交点则为下一个近似值 。
, 假设 ,做切线:

与 轴交点 , 。

点做切线:

不断迭代,切线与 轴交点无线逼近零点。
切线斜率 .
C语言计算立方根算法,不使用库函数,牛顿迭代法实现,保留小数点后一位。
的解。
double x_next = (2 * x + a / (x * x)) / 3.0;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <stdio.h>
double cube_root(double a) { if (a == 0) { return 0; }
double x = a / 3.0; double epsilon = 0.0001; double difference;
do { double x_next = (2 * x + a / (x * x)) / 3.0; difference = (x_next > x) ? (x_next - x) : (x - x_next); x = x_next; } while (difference > epsilon);
return x; }
int main() { double a; scanf("%lf", &a); printf("%.1f", cube_root(a)); return 0; }
|
不使用库函数,计算 算术平方根:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <stdio.h>
double square_root(double a) { if (a < 0) { printf("负数没有实数平方根\n"); return -1; } if (a == 0) { return 0; }
double x = a / 2.0; double epsilon = 0.000001; double difference;
do { double x_next = (x + a / x) / 2.0; difference = (x_next > x) ? (x_next - x) : (x - x_next); x = x_next; } while (difference > epsilon);
return x; }
int main() { double number; scanf("%lf", &number);
double result = square_root(number); if (result != -1) { printf("平方根是:%.1f\n", result); }
return 0; }
|