c语言详解牛顿迭代法以及求解倒数和平方根

Newton's iteration method 是在实数域和复数域利用切线不断逼近方程根的一种求高次曲线方程的方法,区别于梯度下降法,它是二阶导,收敛速度比较快,对于非凸函数,牛顿法容易受到鞍点或者最大值点的吸引。由于牛顿迭代法是局部收敛,初始值选取不当的话,很容易无法收敛。

目录

[1 基本介绍](#1 基本介绍)

[2 公式推导](#2 公式推导)

[3 牛顿迭代法的应用](#3 牛顿迭代法的应用)

[3.1 求倒数](#3.1 求倒数)

[3.2 开根号](#3.2 开根号)

[3.2 马克尔的方法](#3.2 马克尔的方法)

[4 收敛性分析](#4 收敛性分析)


1 基本介绍

牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。

牛顿迭代法实质是一种求根算法,这意味着它的目标是找到函数 f(x)=0 的值 x。在几何上可以将其视为 x 的值,这时函数与 x 轴相交。

2 公式推导

对于 求解此时方程的根,任取近似作为方程的根,利用切线逼近法,可知对于在点做切线与轴的交点的横坐标一定更加逼近

由此可以得到

化简后得到此时的近似值 ,这就是牛顿迭代法的公式

3 牛顿迭代法的应用

3.1 求倒数

有些芯片设计的对于求倒数的方法就是使用的牛顿迭代法,对于求解的倒数,有公式:a:,对于牛顿迭代法设置初值,那么就是已知数,是自变量,由此得到,求解的根,带入到牛顿迭代法公式中得到 ,这就是求导数的牛顿迭代法公式,在ARM Neon中有专门的Intrinsic 指令 float32x4_t = vmulq_f32(vrecpsq_f32(a, ), )来并行求倒数;由于计算机中的直接求倒数一般精度不够或者运行效率比较低,因此可以使用牛顿迭代法来求,在卷积计算中,经常会遇到除法运算,实质上就是求倒数。

3.2 开根号

对于开根号某些芯片也是利用牛顿迭代法,对开根号得到,有公式,对于牛顿迭代法设置初值,那么就是已知数,是自变量,由此得到,求解的根,带入到牛顿迭代法公式中得到 ,这就是牛顿迭代法开根号的公式。

3.1 直接的实现

一般会要求算出的精度,满足精度的情况下就停止运算。代码如下:

复制代码
double sqrt(double x) { 
	if(x == 0) return 0; 
	double result = x; 
	double lastValue = 0;
	while(fabs(result - lastValue) > EPS) 
	{ 
		lastValue = result; 
		result = result / 2.0f + x / 2.0f / result; 
	}
 	return (double)result;
 }

3.2 马克尔的方法

据说非常高效,比3.1的代码快几十倍,比C++标准库函数sqrt快几倍

复制代码
int sqrt(float x) { 
	if(x == 0) return 0; 
	float result = x; 
	float xhalf = 0.5f*result; 
	int i = *(int*)&result; 
	i = 0x5f375a86- (i>>1); // what the fuck? 
	result = *(float*)&i; 
	result = result*(1.5f-xhalf*result*result); // Newton step, repeating increases accuracy 
	result = result*(1.5f-xhalf*result*result); 
	return 1.0f/result; 
}

4 收敛性分析

参考牛顿法及其收敛性分析

相关推荐
Tiny番茄14 分钟前
Multimodal models —— CLIP,LLava,QWen
人工智能
Wnq1007229 分钟前
工业场景轮式巡检机器人纯视觉识别导航的优势剖析与前景展望
人工智能·算法·计算机视觉·激光雷达·视觉导航·人形机器人·巡检机器人
无心水1 小时前
【程序员AI入门:模型】19.开源模型工程化全攻略:从选型部署到高效集成,LangChain与One-API双剑合璧
人工智能·langchain·开源·ai入门·程序员ai开发入门·程序员的 ai 开发第一课·程序员ai入门
有梦想的攻城狮1 小时前
大语言模型与多模态模型比较
人工智能·语言模型·自然语言处理·llm·大语言模型
九章云极AladdinEdu2 小时前
GPU与NPU异构计算任务划分算法研究:基于强化学习的Transformer负载均衡实践
java·开发语言·人工智能·深度学习·测试工具·负载均衡·transformer
量子-Alex2 小时前
【目标检测】RT-DETR
人工智能·目标检测·计算机视觉
2201_754918412 小时前
OpenCV 图像透视变换详解
人工智能·opencv·计算机视觉
天上路人2 小时前
AI神经网络降噪算法在语音通话产品中的应用优势与前景分析
深度学习·神经网络·算法·硬件架构·音视频·实时音视频
羽星_s2 小时前
文本分类任务Qwen3-0.6B与Bert:实验见解
人工智能·bert·文本分类·ai大模型·qwen3
摸鱼仙人~2 小时前
TensorFlow/Keras实现知识蒸馏案例
人工智能·tensorflow·keras