zoukankan      html  css  js  c++  java
  • 1-6、算法设计常用思想之迭代法

    文章内容来自王晓华老师

    人们提出了很多迭代法来近似求解这类问题,比较常见的有梯度法、最小二乘法和牛顿迭代法,只要问题的解是可收敛的(或者是局部可收敛的),都可以使用迭代法求解。

    数学意义上的迭代法是一种不断用变量的旧值递推新值的过程,其对应的迭代算法也是用计算机解决问题的一种基本方法。

    迭代法和递推法的关系
    迭代法作为很多数学问题的求解算法,是解决数学问题的一种常用的算法模式,可以独立构成解决问题的算法。递推法作为一种设计算法的常用思想,没有固定的算法实现模式,通常是与其他算法模式配合形成算法实现。比如线性动态规划问题,一般都有明确的子问题最优解递推公式,递推思想常常作为算法实现的一部分融入到动态规划算法的实现中。

    迭代法的基本思想
    迭代法的实现,一般需要确定以下三个要点。
    • 确定迭代变量:迭代变量一般就是要求解的问题的解,利用迭代递推公式可以不断地由旧值递推出新值。根据问题的不同,迭代变量可以是一个,也可以是多个。确定迭代变量,通常还要根据迭代递推关系给出迭代变量的初始值,这一点也很重要。
    • 确定迭代递推关系:迭代递推关系是根据旧值计算新值的关系或公式,这是迭代法实现的关键,如果不能确定迭代关系,则无法用迭代法实现算法。
    • 确定迭代终止条件:迭代终止条件是控制迭代过程退出的关键条件。迭代不可能无休止地进行,必须设置迭代终止条件,在适当的时候退出迭代。迭代终止条件一般有三种假设:其一是迭代变量已经求得问题的精确值;其二是迭代变量无法得到精确值,但是某个迭代的值的精度已经满足要求;其三是指定明确的迭代计算次数。迭代算法的具体实现,可根据问题的类型选择迭代终止条件。一般情况下,为了防止迭代关系在某个区间上发散(不收敛)使得算法进入死循环,都会把第三个条件作为异常退出条件和其他迭代终止条件配合使用,也就是说,即使无法得到符合条件的解,只要迭代计算次数达到某个限制值,也退出迭代过程。

    std::pair<bool, double> cl_root(double a, double eps)
    {
        double xi = a / 2.0; //初始值用 a 的一半,很多人的选择
        double xt;
        int count = 0;
        do
        {
            xt = xi;
            xi = (xt + (a / xt)) / 2.0;
            count++; //用于检查是否收敛的计数器
            if (count >= LOOP_LIMIT)
            {
                return {false, 0.0}; //不收敛,返回失败 
            }
        } while (std::fabs(xi - xt) > eps);
    
        return { true, xi };
  • 相关阅读:
    WebStorm 使用过程中出现的一些问题以及解决方案
    常用软件工具收集
    个人博客运营策略总结
    OpenGL glMatrixMode() 函数解释与例子
    让搭建在 Github Pages 上的 Hexo 博客可以被 Google 搜索到
    使用 statcounter 统计 Hexo 博客访问量
    使用 Hexo,Material Theme 以及 Github Pages 搭建个人博客
    Ubuntu 16.04下配置 Nginx 与 Node.js 以及服务的部署
    一个简单的在线代码编辑器的实现
    在已有 Windows10 系统的基础上,安装 Ubuntu17.10 系统(新版 BIOS)
  • 原文地址:https://www.cnblogs.com/orxx/p/10950687.html
Copyright © 2011-2022 走看看