例:一元三次方程 x^3-2x+1=0,给定误差精度和最大迭代次数,求解。

1. 牛顿迭代法

牛顿迭代法基本公式:

其中, 是初始解(自定义), 是经历一次迭代后的解。

经过多次迭代,缩小新值与旧值的误差,就可近似求解方程。

# 函数表达式x^3-2x+1
def fun(x):return x ** 3.0 - 2.0 * x + 1.0# 函数一阶导3x^2-2
def fun2(x):return 3.0 * x ** 2 - 2.0# 迭代,参数:初始值、最大迭代次数、最小误差
def get_root(x0, max_iter=50, tol=1e-7):# 初始值浮点化p0 = x0 * 1.0# 最大50次迭代循环for i in range(max_iter):# 函数的一阶导不能为0,最普遍的说法是不能非正定p = p0 - fun(p0) / fun2(p0)# print(p)# 如果小于误差精度值则退出迭代if abs(p - p0) < tol:return "经过{}次迭代,我们估计的参数值是{}".format(i + 1, p)# 赋值重新迭代p0 = pprint("无法迭代")if __name__ == '__main__':print(get_root(2))print(get_root(0))print(get_root(-2))# 输出结果
经过8次迭代,我们估计的参数值是1.0
经过6次迭代,我们估计的参数值是0.6180339887498949
经过5次迭代,我们估计的参数值是-1.618033988749895

2. 梯度下降迭代法

梯度下降迭代基本公式:

其中,  是初始解(自定义), 是经历一次迭代后的解,step 是步长。

经过多次迭代,不断向函数负梯度以步长为单位迭代,求极值。

缺点:靠近极小值时收敛速度变慢,直线搜索时可能产生错误。

# raw_f一阶导0.25x^4-x^2+x
def fun(x):return 0.25 * x ** 4 - x ** 2 + x# 原方程x^3-2x+1
def fun1(x):return x ** 3.0 - 2.0 * x + 1.0def get_root(x0, max_iter=500, tol=1e-10, step=0.1):# 初始值浮点化p0 = x0 * 1.0for i in range(max_iter):# 代入公式迭代p = p0 - step * fun1(p0)# 如果小于误差精度则退出迭代# 方程等于0,即raw_f在那点的导数为0,点左右极限等于该点值,由此计算精度if abs(fun(p0) - fun(p)) < tol:return "经过{}次迭代,我们估计的参数值是{}".format(i + 1, p)p0 = pprint("无法迭代")if __name__ == '__main__':print(get_root(2))print(get_root(0))print(get_root(-2))# 输出结果
'''此方法只求出了两个根,可能与步长有关'''
经过84次迭代,我们估计的参数值是1.0000274490963825
经过22次迭代,我们估计的参数值是-1.618031477687423
经过13次迭代,我们估计的参数值是-1.6180357828240552

3. 哈雷迭代法

# 方程
def fun(x):return x ** 3.0 - 2.0 * x + 1.0# 一阶导
def fun1(x):return 3.0 * x ** 2 - 2.0# 二阶导
def fun2(x):return 6.0 ** xdef get_root(x0, max_iter=50, tol=1e-5, step=1):# 初始值浮点化p0 = x0 * 1.0# 最大50次循环迭代for i in range(max_iter):# 函数的一阶导不能为0,最普遍的说法是不能非正定discr = fun1(p0) ** 2 - 2 * fun(p0) * fun2(p0)if discr < 0:p = p0 - step * fun(p0) / fun1(p0)else:if fun2(p0) >= 0:p = p0 - step * 2 * fun(p0) / (fun1(p0) + fun1(p0) * (discr ** 0.5))else:p = p0 - step * 2 * fun(p0) / (fun1(p0) - fun1(p0) * (discr ** 0.5))# 如果小于误差精度则退出迭代if abs(p - p0) < tol:return u'经过%s次的迭代,我们估计的参数值是%s' % (i + 1, p)# 重新赋值变量,进入下一轮迭代p0 = pprint("无法迭代")if __name__ == '__main__':print(get_root(2))print(get_root(0))print(get_root(-2))# 输出结果
经过7次的迭代,我们估计的参数值是1.0000000000000266
经过6次的迭代,我们估计的参数值是0.618034653711193
经过32次的迭代,我们估计的参数值是-1.6180558864129027

Python迭代法求解方程相关推荐

  1. python迭代法求解方程_迭代法求解方程(组)的根

    首先,迭代法解方程的实质是按照下列步骤构造一个序列x0,x1,-,xn,来逐步逼近方程f(x)=0的解: 1)选取适当的初值x0: 2)确定迭代格式,即建立迭代关系,需要将方程f(x)=0改写为x=φ ...

  2. python迭代法求解方程_第一部分:趣味算法入门;第六题牛顿迭代法求一元三次方程的根...

    100个不同类型的python语言趣味编程题 在求解的过程中培养编程兴趣,拓展编程思维,提高编程能力. 第一部分:趣味算法入门:第六题SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键 ...

  3. 3.牛顿迭代法求解方程的根

    牛顿迭代法求解方程的根 引题:用牛顿迭代法求下列方程在值等于x附近的根: 2 x 3 − 4 x 2 + 3 x − 6 = 0 2x^3-4x^2+3x-6=0 2x3−4x2+3x−6=0 输入: ...

  4. 算法分析与设计-迭代法求解方程(组)的根(详解)

    算法分析设计课之期末考试前的重要算法复习总结... 以下内容大多都摘抄自上课的课件的内容,但是课件没有解方程的完整代码,于是自己又写了写代码,仅供参考. 首先,迭代法解方程的实质是按照下列步骤构造一个 ...

  5. 分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根

    编写程序,分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根,要求计算精确到小数点后七位数字为止,并将求出的近似结果与理论值2cos20 相比较,二分法的初始迭代区间 ...

  6. 二分法和简单迭代法的优缺点_二分法和牛顿迭代法求解方程的比较.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp高等教育&nbsp>&nbsp理学 二分法和牛顿迭代法求解方程的比较.doc5页 本文档一共 ...

  7. python迭代法求解非线性方程_荐【数学知识】非线性方程求解的二分法以及牛顿迭代法...

    [数学知识]非线性方程求解的二分法以及牛顿迭代法 本博客不谈及理论推导,只提供代码实现,关于理论推导,大家可以查看其它博客文章. 导入包 import sys import math import s ...

  8. matlab用牛顿迭代法求解方程,牛顿迭代法求方程解 程序如下

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function [x_reality,n_reality] = Newt( f_name,x_start,tolerance,n_limit) %% % ...

  9. 1、编写程序,分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根,要求计算精确到小数点后七位数字为止,并将求出的近似结果与理论值2cos20 相比较,二分法的初始迭代

    二分法: #include<stdio.h> #include<math.h> void main() {     double x,x1=1,x2=3,f1,f2,f;    ...

最新文章

  1. SQLServer内置函数
  2. 机器学习有很多关于核函数的说法,核函数的定义和作用是什么?
  3. 解决 SSH 不能输入中文的问题
  4. Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签
  5. 聊聊高并发(六)实现几种自旋锁
  6. 计算机视觉、机器学习相关领域论文和源代码大集合--持续更新……
  7. 部署SCVMM2012 SP1 集群(1)---部署AD
  8. oracle使用with as提高查询效率
  9. 中过滤记录中时间_初效板式过滤器使用中这些事情你要知道?
  10. 字符编码 and cpp
  11. 指向类成员的指针并非指针
  12. 使用BackTrack4破解Windows用户密码
  13. linux运行python乱码_linux下python中文乱码解决方案
  14. MASM入门(二)MASM基本语法
  15. 如何检索某学术会议全部论文?
  16. QGC使用国内天地图卫星图并添加注记图层
  17. python参数类型为uint8_Python 改变数组类型为uint8的实现
  18. Bzoj2037 [Sdoi2008]Sue的小球
  19. day2 编码与基本数据类型转换
  20. 神经网络训练平台,在线神经网络训练

热门文章

  1. 机器学习算法(二十三):DTW(Dynamic Time Warping,动态时间调整)
  2. 工业互联网能耗管理·智慧空调接入华为云解决方案
  3. 广州线下python培训
  4. python1到100能被5整除_python 数字整除_Python | 打印1到1000之间的所有数字,这些数字可以被7整除,并且不能被5整除......
  5. C语言选择排序法(通俗易懂类型)
  6. 2021年本溪高考成绩查询,2021本溪市地区高考成绩排名查询,本溪市高考各高中成绩喜报榜单...
  7. 突破百度网盘(百度云盘)不限速,无需充值VIP
  8. Java项目:私人牙医管理系统(java+SpringBoot+html+layui+echarts+maven+mysql)
  9. 关于STM32使用LAN8720A插拔网线重连
  10. c++ 原子操作 赋值_5.2 C++中的原子操作和原子类型