目录
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;
}
结果如下: