Python时空大数据AI机器学习及python实现

Python与数学牛顿迭代法—Apple的学习笔记

2018-10-13  本文已影响8人  applecai

一,牛顿迭代法一般用来求f(x)为0的解

通过先选一个x的近似值开始逐渐逼近。初始Xn的选择也是有讲究的。

简单来说,一阶导数是自变量的变化率,二阶导数就是一阶导数的变化率,也就是一阶导数变化率的变化率。 连续函数的一阶导数就是相应的切线斜率。一阶导数大于0,则递增;一阶倒数小于0,则递减;一阶导数等于0,则不增不减。 而二阶导数可以反映图象的凹凸。二阶导数大于0,图象为凹;二阶导数小于0,图象为凸;二阶导数等于0,不凹不凸。

二,牛顿迭代法的优缺点

牛顿法优点:二阶收敛,收敛速度快;牛顿法可以求最优化问题,而且求解精确,一般用牛顿法求得的解成为ground-truth。

牛顿法缺点:

1 牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。二阶方法实践中对高维数据不可行。

2 可能发生被零除错误。当函数在它的零点附近,导函数的绝对值非常小时,运算会出现被零除错误。

3 是可能出现死循环。当函数在它的零点有拐点时,可能会使迭代陷入死循环。Note:f(x) = arctanx, 2阶导产生(拐点) f''(x*) = 0。

4 定步长迭代。改进是阻尼牛顿法。

三,python主要函数介绍

3.1定义变量-Symbols函数

x = symbols(‘x‘)

x + 1

x + 1

3.2 变量替换subs函数

x = symbols(‘x‘)

expr = x + 1

expr.subs(x, 2)

3

3.3微分-Symbols函数

from sympy import *

x = Symbol(‘x‘)

diff(sin(x), x)

cos(x)

四,python代码实现

迭代计算4次迭代停止。还有一种方法就是S(n+1)-Sn设置为某个精度值来停止。

def NewTon(f, s = 1, maxiter = 100, prt_step = False):
for i in range(maxiter):
s = s - f.subs(x,s)/f.diff().subs(x,s)
if prt_step == True:
print ("After {0} iteration, the solution is updated to {1}".format(i+1,s))
return s

from sympy import *
import matplotlib.pyplot as plt
import numpy as np
x = Symbol("x")
f = x*2-2x-4
print (NewTon(f, s = 2, maxiter = 4, prt_step = True))

x = np.linspace(0,5,100)
y = [val*2-2val-4 for val in x]
plt.axhline(y=0,xmin=0,xmax=1,color = 'black')
plt.plot(x, y) # plotting x and y
plt.show()

Figure_1.png

五,牛顿迭代法推导

牛顿迭代.png
上一篇下一篇

猜你喜欢

热点阅读