1. 引言
我们在中学的时候学过一元二次函数,求解时引入一个求根公式,代入公式就可以得到不同的根,假如想计算一个高次方程的解,我们还能推导出求根公式吗?
伽罗瓦在群论中证实,五次及以上多项式方程没有显示表达的求根公式,但是科学研究(例如行星轨道计算)中还是有很多求解高次方程的真实需求。既然得不到明确的求根公式,我们可以用迭代的办法来不断逼近真实的解。
多项式方程求解的问题实际上可以看成是函数求极值,假如我们对
的求解得到驻点,将驻点代入
就可以计算出函数的极值。显然低次方程的求解可以用求根公式精确计算
的值,但是高次方程的求解就要用逼近的思路比如梯度下降法、最速下降法、牛顿法等。本文主要讨论牛顿法和使用python对一元函数和多元函数求极值。
2. 牛顿法基本原理
2.1. 一元函数牛顿法
假如函数
是一个一元函数,使用泰勒公式二阶近似可以得到
一元函数取极值的条件是
,两端分别求导(下式约等号写作等号)得到
整理出
的迭代公式
进一步写出迭代关系表达式,得到
因为牛顿法的迭代关系是根据要求解极值函数的导数图像在该点的斜率进行迭代,因此没有没有步长的概念,在哪一点得到极值仅仅依靠迭代的步数。相应的,迭代的次数越多越接近极值点。
上述在介绍了抽象的公式之后,我们来看这样一个小例子,已知一个函数
,在没有其他约束条件求
的极值。
在用牛顿法计算极值之前,使用软件绘制
的图像,用肉眼粗略的观测一下极值在哪里,可以帮助我们在后续计算中检验正确与否。