牛顿迭代法

牛顿迭代法介绍

\(r\)\(f(x)=0\) 的根,选取 \(x_0\) 作为 \(r\) 的初始近似值,过点 \(x_0,f(x_0)\) 做曲线 \(y=f(x)\) 的切线 \(L\)\(L:y=f(x_0)+f'(x_0)(x-x_0)\),则 \(L\)\(x\) 轴交点的横坐标 \(x_1=x_0-{f(x_0)\over f'(x_0)}\),称 \(x_1\)\(r\) 的一次近似值。过点 \((x_1,f(x_1))\) 做曲线 \(y=f(x)\) 的切线,并求该切线与 \(x\) 轴交点的横坐标 \(x_2=x_1-{f(x_1)\over f'(x_1)}\),称 \(x_2\)\(r\) 的二次近似值。重复以上过程,得 \(r\) 的近似值序列,其中,\(x_{n+1}=x_n-{f(x)\over f'(x_n)}\) 称为 \(r\)\(n+1\) 次近似值,上式称为牛顿迭代公式

用牛顿迭代法解非线性方程,是把非线性方程 \(f(x)=0\) 线性化的一种近似方法。把 \(f(x)\) 在点 \(x_0\) 的某邻域内展开成泰勒级数 \(f(x)=f(x_0)+f'(x_0)(x-x_0)+{f''(x_0)(x-x_0)^2\over 2!}+\cdots + {f^{(n)}(x_0)(x-x_0)^n\over n!}+R_n(x)\),取其线性部分(即泰勒展开的前两项),并令其等于 \(0\),即 \(f(x_0)+f'(x_0)(x-x_0)=0\),以此作为非线性方程 \(f(x)=0\) 的近似方程,若 \(f'(x_0)\neq 0\),则其解为 \(x_1=x_0-{f(x_0)\over f'(x_0)}\),这样,得到牛顿迭代法的一个迭代关系式:\(x_{n+1}=x_n-{f(x_n)\over f'(x_n)}\)

已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果不为 \(0\), 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。

迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

例如:输入一个正整数 \(n(1\le n\le 1000)\),请求出 \(\sqrt{n}\) 的值,精确到小数点后 \(2\) 位。

#include <iostream>
using namespace std;
int main() {
	double n, x;
	cin >> n;
	x = n;
	for (int i = 1; i <= 20; ++i)
		x = x - (x*x - n)/(2*x);
	cout << x;
}
posted @ 2025-08-22 09:18  飞花阁  阅读(35)  评论(0)    收藏  举报
//雪花飘落效果