python和数学牛顿法的程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python和数学牛顿法的程序相关的知识,希望对你有一定的参考价值。

这个程序运行之后是无限循环的,可不可以告诉我为什么会造成这个结果呢x^3 - 3x^2 + x + 3 = 0 用数学牛顿法来解决这个问题
这个是牛顿法的公式。 能不能具体说明一下上面的程序为什么会出现无限循环呢,最初的x的值是1和2的情况下都会出现无限循环。
能不能具体讲解一下为什么会出现无限循环,怎样才会避免这个无限循环呢。 跪求。。。

参考技术A 导数f′(x0)=lim(f(x0+Δx)-f(x0))/Δx的变换应用,求满足f(x0+Δx)=0的x0+Δx追问

答非所问

追答

x(n+1)=xn+Δx=xn+(0-f(xn))/f’(xn)

是你没理解Δx的变形应用,很多求跟都是应用导数数值分析法进行精度逼近

赋值错误,涉及精度,开始应该是x=1.0000而不是x=1,跟踪程序看数据精度造成x一直是整数

追问

赋值1.0000之后还是会出现无限循环的情况。。

追答

开debug程序跟踪变量看看

追问

抱歉 真的答非所问。我只想知道为什么会出现无限循环还有就是如何避免。
但谢谢你的回答

拟牛顿法之BFGS

参考技术A   考虑无约束最优化问题

  假设 有二阶连续偏导,且 表示第 次迭代的值。可以将 在 附近做二阶泰勒展开

  其中, 是 的梯度在点 的值, 是 的海塞矩阵

在点 的值。

  每次迭代从 开始,求目标函数的极小点。假设 满足

由泰勒展开,有


因此有

或者以 定义搜索方向,即有

以式 迭代就是牛顿法

  在牛顿法的迭代中,需要计算海塞矩阵的逆矩阵 ,这一计算比较复杂,考虑用一个 阶矩阵 代替 。就是拟牛顿法的基本想法。

  由梯度的基本定义,可知 满足以下关系

令 ,则 ,称为拟牛顿条件。如果 正定,则可以保证搜索方向式下降的。
  这是由于搜索方向是 ,根据牛顿法的迭代规则,有
所以在前述的泰勒展开中, 可以改写为

由于 正定, 。故当 充分小时,总有

  拟牛顿法同样满足这个条件,以一正定矩阵 代替 ,同时令其满足拟牛顿条件,即 按照拟牛顿法,在每次迭代中可以选择更新矩阵 。

  DFP方法选择正定矩阵逼近的是海塞矩阵的逆矩阵,仍未达到最优化。故BFGS方法用正定矩阵 逼近海塞矩阵 本身。此时相应的拟牛顿条件为 。

  假设每次迭代中,

考虑使 和 满足
得到BFGS迭代公式

输入:目标函数 ,梯度函数 ,精度要求
输出: 的极小点
(1)选定初始点 ,取 为正定对称矩阵,置
(2)计算 ,如果 ,停止迭代,找到最优点,否则继续迭代
(3)由 求出
(4)求 使得
(5)更新
(6)计算 ,比较误差,如果不符合停止条件,计算 ,进行下一次迭代
(7)

以上是关于python和数学牛顿法的程序的主要内容,如果未能解决你的问题,请参考以下文章

牛顿法与拟牛顿法的区别与联系

GBDT与xgb区别,以及梯度下降法和牛顿法的数学推导

拟牛顿法之BFGS

第十一章 拟牛顿法

牛顿法和二分法精度上的区别

牛顿法、拟牛顿法