牛顿迭代法
newton_iteration_method
阿贝尔—鲁菲尼定理指出,五次及更高次的代数方程没有一般的代数解法,即这样的方程不能由方程的系数经有限次四则运算和开方运算求根。
即对于低次n≤4多项式方程,根的存在性是可以通过构造的方式得到的,可以得到求根公式。但n≥5时一般没有求根公式。
高斯的代数基本定理:任何复系数一元n次多项式 方程在复数域上至少有一根(n≥1),由此推出,n次复系数多项式方程在复数域内有且只有n个根(重根按重数计算)。代数基本定理在代数乃至整个数学中起着基础作用。 据说,关于代数学基本定理的证明,现有200多种证法。
一元函数
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method)
多数方程不存在求根公式,牛顿迭代法使用函数的泰勒级数的前几项来寻找方程的根
设
过点
过点
……
1.以
0 | 2.0000 | 1.6667 | -1.0000 | -0.6667 | |
1 | 1.6190 | 1.6190 | -0.6667 | -0.6190 | |
2 | 1.6180 | 1.6180 | -0.6190 | -0.6180 | |
3 | 1.6180 | 1.6180 | -0.6180 | -0.6180 | |
4 | 1.6180 | 1.6180339887 | -0.6180 | -0.6180339887 | |
根 | (1+√5)/2=1.61803398875 | (1-√5)/2=-0.61803398875 |
选取初始值会影响最后根的结果
2.以
0 | -1.0000 | -0.7330 | 0.5 | -1.6561 | |
1 | -0.7330 | -0.7038 | -1.6561 | -0.9277 | |
2 | -0.7038 | -0.7035 | -0.9277 | -0.721 | |
3 | -0.7035 | -0.7034674683 | -0.721 | -0.7036 | |
4 | -0.7036 | -0.7034674283 | |||
-0.000000087166031 | -0.000000010998992 |
显然
3.以
显然
Time | |||
-0.8656497053 | 6 | -0.000 000 003237437873 | 0.00012441060000000000 |
1.2268886960 | 8 | -0.000 000 000006451728 | 0.00016655110000000001 |
16.9988873523 | 9 | 0.000 000 070780515671 | 0.00020211259999999999 |
3.1优化算法,对
带入迭代公式中,初始值依次选取0,2,20
Time | |||
-0.8656499126 | 6 | -0.000 000 695075708823 | 0.00012678300000000000 |
1.226887208 | 8 | 0.000 019750994960432 | 0.00018222190000000000 |
1.2268872075 | 21 | 0.000 019751001404167 | 0.00047578460000000003 |
二者都是调用函数形式
显然,也能取到三个近似根,精度,迭代次数和运行时间上不占优势,这是没有采用指数形式,精确度的不够,但是或许在某些场景会更快?可能吗,目前还不知道matlab的底层算法是怎样的(挖坑)
牛顿迭代法的特点和优缺点
特点:
- 牛顿法收敛速度为二阶,对于正定二次函数一步迭代即达最优解
- 牛顿法是局部收敛的,当初始点选择不当时,往往导致不收敛
- 牛顿法不是下降算法,当二阶海塞矩阵非正定时,不能保证产生方向是下降方向
- 二阶海塞矩阵必须可逆,否则算法求解过程进行困难
- 对函数要求苛刻(二阶连续可微,海塞矩阵可逆),而且运算量大
优点:
- 对于二次连续可导的凸函数,二阶收敛很强,收敛速度快
- 求解多元非线性方程:牛顿迭代法可以同时求解多元非线性方程
- 可以求解高精度解:牛顿迭代法可以求得高精度的解,因此适用于精确计算
缺点:
- 函数要求显性:牛顿迭代法只适用于二次函数及其幂级数展开,对其他形式的函数不适用
- 可能不收敛:牛顿迭代法有时可能不收敛,尤其是在函数的二阶导数不连续或不存在的情况下
- 函数零点数量不确定
- 初始点选择影响:牛顿迭代法的结果与初始点选择有关,如果初始点选择不当,可能导致不收敛;若初始点离零点不够近,牛顿法可能会发散,或者变得十分低效;Carmark平方根倒数算法对牛顿迭代法初值的选择可微经典
快速收敛式
拉马努金圆周率公式

代码实现
三个.m文件,如下
function y=primitive_function(x)
e = 2.7182818284590452353602874713527;
x = x-0; %x0处展开
% e = 2.718281828459;
% y=x*x-x-1; %函数f(x)的表达式
% y=(1+x+x^2/2+x^3/6+x^4/24+x^5/120+x^6/720+x^7/7/720+x^8/56/720)-x^6; %函数e^x-x^2的x=x0处泰勒展开表达式
y=e^x-x^6;
end
function z = derived_function(x)
e = 2.7182818284590452353602874713527;
x = x-0; %x0处展开
% e = 2.718281828459;
% z = x*2-1; %函数f(x)的导数表达式z
% z = (1+x+x^2/2+x^3/6+x^4/24+x^5/120+x^6/720+x^7/7/720)-6*x^5; %2种方法,导数后泰勒展开,或者泰勒展开后求导;
% 太慢了,牛顿法改进
z = e^x-6*x^5;
end
%主程序,计算e^X-X*X+1的零点,只能一个
tic; %启动一个定时器
e = 2.7182818284590452353602874713527;
l=0; %记录循环程序次数
maxl=1000; %循环程序总次数
while l<maxl
X=0; %迭代初值
% x0=4; %泰勒展开处的值
i=1; %迭代次数计算
I=1000; %最大迭代次数
while i
Xn=X-primitive_function(X)/derived_function(X); %牛顿迭代格式
% Xn=X-(X*X-X-1)/(X*2-1); %或者直接函数表达
% Xn=X-(e^X-X^6)/(e^X-6*X^5);
disp([X Xn]); %显示每次迭代值
if abs(Xn-X)>0.00000001 && i<I && abs(e^X-X*X)>0.0000000001 %收敛判断
X=Xn;
else
break
end
i=i+1;
end
l=l+1;
end
t=toc;%显示自定时器tic开启到当前所经历的时间。若定时器没有运行,则toc命令返回0
fprintf('\n %s %.20f','time=',t/maxl)
if i==I
disp('增加迭代次数或者减小误差或者增加展开级数'); %输出结果
else
fprintf('\n %s %.10f \t %s %d \t %s %.18f %d','X=',X,'i=',i,'erro=',e^X-X^6) %输出结果
end
多元函数的牛顿迭代
函数
迭代公式:
……
矩阵形式,令
所以
牛顿迭代法:
其中
以求
Sol
偏导矩阵
雅可比矩阵是函数的一阶偏导数以一定方式排列成的矩阵,从一个 n 维的欧式空间转换到 m 维的欧氏空间,可以不是方阵



使用雅克比矩阵和{任意点与p点的距离} 来估算x所对应的f值,pytorch和tensorflow利用雅可比矩阵实现梯度下降法
黑塞矩阵(Hessian Matrix)为函数的二阶偏导数形成的矩阵,为方阵


若
诸如牛顿法等梯度方法中,使用海森矩阵的正定性可以非常便捷的判断函数是否有凸性,也就是是否可收敛到局部/全局的最优解。
仅仅使用梯度信息的优化算法称之为 一阶优化算法,如梯度下降算法等。
使用 Hessian 矩阵的优化算法称之为 二阶优化算法,如牛顿法等。
雅可比矩阵,Jacobi matrix 或者 Jacobian,是向量值函数(
黑塞矩阵,又叫海森矩阵,Hesse matrix,是多元函数(

A为黑塞矩阵


- 当
正定矩阵时, 在 处是极小值 - 当
负定矩阵时, 在 处是极大值 - 当
不定矩阵时, 不是极值点 - 当
为半正定矩阵或半负定矩阵时,M_0(a_1,a_2,……,a_n)是“可疑"极值点,尚需要利用其他方法来判定。






最速下降法、牛顿法、共轭梯度法原理及对比
拟牛顿法
信赖域法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)