1. 迭代法基本思想

迭代法的实现,一般需要确定以下三个要点。

1.1 确定迭代变量:

迭代变量一般就是要求解的问题的解,利用迭代递推公式可以不断地由旧值递推出新值。根据问题的不同,迭代变量可以是一个,也可以是多个。

确定迭代变量,通常还要根据迭代递推关系给出迭代变量的初始值,这一点也很重要。

1.2 确定迭代递推关系:

迭代递推关系是根据旧值计算新值的关系或公式,这是迭代法实现的关键,如果不能确定迭代关系,则无法用迭代法实现算法。

1.3 确定迭代终止条件:

迭代终止条件是控制迭代过程退出的关键条件。迭代不可能无休止地进行,必须设置迭代终止条件,在适当的时候退出迭代。

迭代终止条件一般有三种假设:

  • 其一,是迭代变量已经求得问题的精确值;
  • 其二,是迭代变量无法得到精确值,但是某个迭代的值的精度已经满足要求;
  • 其三,是指定明确的迭代计算次数。

迭代算法的具体实现,可根据问题的类型选择迭代终止条件。一般情况下,为了防止迭代关系在某个区间上发散(不收敛)使得算法进入死循环,都会把第三个条件作为异常退出条件和其他迭代终止条件配合使用,也就是说,即使无法得到符合条件的解,只要迭代计算次数达到某个限制值,也退出迭代过程。

2. 实例

2.1 用迭代法求 平方根

公式:求 a 的平方根的迭代公式为: Xn+1=(Xn + a/Xn)/2 要求前后两次求出的 x 的差的绝对值小于10-5 时结束,并输出每次迭代的结果和最后结果

def func(a):i = 0x = 1.0ret = 0while True:i += 1previous_ret = ret     ret = (x + a/x)/2.0       # 迭代递推关系x = ret                    # 迭代变量print "i is {}".format(i)if abs(ret - previous_ret) <= 10**(-5):        # 迭代终止条件breakprint "ret is {}".format(ret)func(81)

2.2 二分迭代求解低阶非线性方程

对于 f(x) = 2x2 + 3.2x - 1.8 求在 [-0.8, 8] 区间使得 f(x) = 0 的解,由于计算机无法对两个浮点数直接做相等的判断,故对其精度误差要求小于 10-9

def fun(x):f = 2*x**2 + 3.2*x - 1.8return fdef main(value_range):begin = value_range[0]end = value_range[1]i = 0while True:i += 1print "i is {}".format(i)mid = (begin + end) / 2print "mid is {}".format(mid)if fun(begin) * fun(mid) > 0.0:begin = midelse:end = midif abs(begin - end) < 10**(-9):print midbreakif __name__ == "__main__":main([-0.8, 8])

算法设计思想(3)— 迭代法相关推荐

  1. (十五)算法设计思想之“回溯算法”

    算法设计思想之"回溯算法" 回溯算法是什么? 什么问题适合用回溯算法解决? 适合回溯算法解决的问题 全排列 LeetCode:46.全排列 LeetCode:78.子集 思考题 回 ...

  2. (十四)算法设计思想之“贪心算法”

    算法设计思想之"贪心算法" 贪心算法是什么 LeetCode:455.分饼干 LeetCode:122.买卖股票的最佳时机II 思考题 贪心算法是什么 贪心算法是算法设计中的一种方 ...

  3. (十三)算法设计思想之“动态规划”

    算法设计思想之"动态规划" 动态规划是什么? 动态规划的步骤 LeetCode:70.爬楼梯 LeetCode:198.打家劫舍 思考题 动态规划是什么? 动态规划是算法设计中的一 ...

  4. (十二)算法设计思想之“分而治之”

    算法设计思想之"分而治之" 分而治之是是什么 场景一:归并排序 场景二:快速排序 LeetCode:374.猜数字大小 LeetCode:226.翻转二叉树 LeetCode:10 ...

  5. 算法设计与分析-迭代法-穿越沙漠问题

    算法设计与分析-迭代法-穿越沙漠问题 题目: 用一辆吉普车穿越1000公里的沙漠.吉普车的总装油量为500升,耗油率为1升/公里.由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库.该吉普车以最少 ...

  6. 算法设计与分析_[04] 天牛须算法设计思想分析

    原文链接: https://arxiv.org/abs/1710.10724​arxiv.org 算法实现: 首先,初始化参数 ,分别代表初始解,初始的搜索范围,以及更新步长,且通过原文我们知道: 在 ...

  7. 五大算法设计思想,你都知道吗?

    作者:叫我不矜持 链接:https://www.jianshu.com/p/bf8b0668d191 一.分治法 1.概念: 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分 ...

  8. 求一个任意实数c的算术平方根g的算法设计思想_算法复习第四篇——贪心法

    公元2020年5月5日,距离算法考试仅剩4天. 一.知识归纳 1.设计思想 只根据当前已有的信息就做出选择,而且一旦做出了选择,将来无论如何都不能更改 不从整体最优考虑,所做的选择只是在某种意义上的局 ...

  9. 算法设计思想(2)— 贪婪法

    1. 贪婪法定义 贪婪法,又称贪心算法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好的或最优的选择(局部最有利的选择),并以此希望 ...

最新文章

  1. 搞懂机器学习的常用评价指标!
  2. 复星金服微服务_阿里巴巴财报:蚂蚁金服净利润59亿元,支付宝服务用户约12亿...
  3. linux 编译文件mm,Linux编译C++文件,说没有找到头文件,怎么啊?新手,不太会用...
  4. 魔力宝贝服务器列表修改,魔力宝贝修改代码一览表GM.docx
  5. 如何判断一个网站是否被百度处罚中
  6. JAVAWEB入门之Servlet_体系结构
  7. QML工作笔记-PC端和Android端布局错位问题
  8. python测试代码怎么写_python unittest编写测试代码
  9. 怎么看电脑是不是linux系统,怎么查看自己的电脑系统是什么版本
  10. js正则替换字符串中的变量为变量的值
  11. mysql的学习笔记(六)
  12. MySQL 中隔离级别 RC 与 RR 的区别
  13. 扇贝有道180921每日一句
  14. 工作流框架的设计要点
  15. [Android]安卓简易计算器 (使用GridLayout)
  16. 数学建模13种常见方法
  17. 电影下载、播放、制作、转换、各类问题全攻略
  18. 惰性学习法与kNN分类
  19. FTP协议主动(Port)模式和被动(Passive)两种模式详解
  20. 淘宝联盟(淘客)常用接口整理

热门文章

  1. 2022-2028年中国二次供水设备行业研究及前瞻分析报告
  2. 2021-2027年中国智能调光玻璃行业市场行情动态及投资前景分析报告
  3. 【VB】学生信息管理系统3——连接数据库的前提
  4. sql移除数据中的换行符和回车符
  5. Python 字典(Dictionary) get()方法
  6. Java并发编程之CountDownLatch、CyclicBarrier和Semaphore
  7. LeetCode简单题之按键持续时间最长的键
  8. 2022年新能源汽车产业集群百人会
  9. Paddle Lite端侧部署
  10. 深度树匹配模型(TDM)