(2)迭代算法

目录

1 简介

2 算法示例

2.1 求平方根

 2.2 二分法求根

3 参考


1 简介

    迭代法,是一种不断用变量的旧值推出新值的过程,跟迭代法相对应的是直接法(一次解法),即一次性解决问题。由于计算机运算速度快、适合做重复性操作的特点,迭代算法已成为用计算机解决问题的一种基本方法。

2 算法示例

2.1 求平方根

问题:给定一个数,求这个数的平方根,误差小于某一范围。

解决思路:设给定的数为 input ,其平方根为 x,根据x*(input/x) = input的特点,令每次迭代 x = (x + input/x)/2;

代码如下:

static void Main(string[] args)
{
    //给定一个数input
    double input = 9;
    Console.WriteLine("输入 = " + input+"\n");
    Console.WriteLine("\n平方根res = "+sqrt(input));
}
static double sqrt(double a)
{
    double res = 1.0;
    int i = 1;
    do
    {
        Console.WriteLine("第" + i + "次迭代:x = " + res);
        res = (res + a / res) / 2.0;
        i++;
    } while (Math.Abs(res - a / res) > 1e-6);
    return res;
}

结果如下:

平方根例子

 2.2 二分法求根

问题:用二分法求 y=x*x-4的根,误差小于一定范围;

解决方法:判断区间上下界函数值相乘是否为正数,来迭代区间的上下界。

代码如下:

static void Main(string[] args)
{
    //y= x*x - 4
    //设置区间左右边界值
    double left = -2, right = 5;
    double cen ;

    int i=1;
    do{
        cen = (left + right) / 2.0;
        Console.WriteLine("第" + i + "次迭代 x=" + cen);
        if( func(left)*func(cen) >0 )
        {
            left = cen;//若函数值相乘为正数,则区间变为[cen,right]
        }
        else{
            right = cen;//若函数值相乘为负数,则区间变为[left,cen]
        }
        i++;
    }while(Math.Abs(func(cen))>1e-5);
}
static public double func(double num)
{
    double res = num*num-4;
    return res;
}

结果如下:

二分法例子

3 参考

慕课网——唐大仕(c#程序设计第5章)

猜你喜欢

转载自blog.csdn.net/qq_29406323/article/details/86612107