python牛顿迭代公式_Python与数学牛顿迭代法—Apple的学习笔记

一,牛顿迭代法一般用来求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 + 1expr.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()

AAffA0nNPuCLAAAAAElFTkSuQmCC

Figure_1.png

五,牛顿迭代法推导

AAffA0nNPuCLAAAAAElFTkSuQmCC

作者:applecai

链接:https://www.jianshu.com/p/e155ccb4b9bf

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值