牛顿法
来源:互联网 发布:淘宝代运营tmyunying 编辑:程序博客网 时间:2024/06/05 11:33
泰勒公式
首先看泰勒公式,对于函数,如果函数平滑且某点存在各阶导数,则可以用一个多项式来描述该点邻域的近似值。公式如下:
这里写图片描述
牛顿法
牛顿法一般用来求解方程的根和求解极值。
数值优化算法除了梯度下降法外还有比较常用的一种方法是牛顿法。对于非线性方程,可以用牛顿迭代法进行求解,它收敛速度快。
基本思想是:对于非线性函数f(x),根据泰勒公式得到x附近某个点xk展开的多项式可用来近似函数f(x)的值,该多项式对应的函数为F(x),求得F(x)的极小值作为新的迭代点,然后继续在新的迭代点泰勒公式展开,直到求得的极小值满足一定的精度。
原理
假设函数f(x)二次可微,则二次泰勒展开,
f(x)≈g(x)=f(xk)+f′(xk)(x−xk)+12f′′(xk)(x−xk)2
g(x)多项式则为f(x)的近似,求函数f(x)极值则可以转化为求导函数为0,对g(x)求导并令其为0,
f′(xk)+f′′(xk)(x−xk)=0
得到,
x=xk−f′(xk)f′′(xk)
即得到迭代公式,
xk+1=xk−f′(xk)f′′(xk)
新的点xk+1不断逼近极值,直到一次导数小于某误差。
迭代步骤
确定初始点x0,确定误差大小e。
计算f′(xk),若它的绝对值小于e则停止迭代,xk即为极值点。
计算f′′(xk),并根据迭代公式求得xk+1。
跳转到步骤2。
实现代码
def h(x): return x*x*x + 2*x*x +3*x + 4def h1(x): return 3*x*x + 4*x + 3def h2(x): return 6*x + 4xk = 0k = 1y = 0e = 0.0001times = 10000while k < times: y = h(xk) a = h1(xk) if abs(a) <= e: break b = h2(xk) xk -= a/b k += +1print("k = ", k)print("x = ", xk)print("y = ", y)
阅读全文
0 0
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- 牛顿法
- CentOS6下源码编译的php7安装redis扩展
- 算法练习(25):Maximum Length of Repeated Subarray
- jquery:将table表变为可编辑状态,记录修改,新增或者删除的行。传入后台controller中
- Hive_基础
- 【剑指offer】数组中次数超过一半的数
- 牛顿法
- 数据结构--循环列队
- linux vi/vim
- 京东金融x银联晒“打黑成绩单”:一年内避免用户损失上亿元,未来共筑AI风控
- js取整、取余的方法
- 数据结构实验: 树形结构及其应用(C语言)
- node.js中的fs模块
- jeesite的junit,数据没有插入?
- ${requestScope.message} jsp EL 表达式获取不到ModelAndView属性