迭代算法的思路
适合做重复选代算法是用计算机解决问题的一种基本方法。它利用计算机运行速度快、适合做重复性操作的特点,让计算机对组指令 (或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
在使用选代算法时,需要做好以下3个方面的工作。
间接地不断由旧
(1)确定迭代变量
在可以使用选代算法解决的问题中,至少存在一个迭代变量,即直接或间接地不断由旧值递推出新值的变量。
(2)建立达代关系式
迭代关系式是指如何从变量的前一个值推出其下一个值的公式或关系,通常可以使用递推或倒推的方法来建立选代关系式,选代关系式的建立是解决迭代问题的关键。
(3)对选代过程进行控制
在编写选代程作时,必须确定在什么时候结束迭代过程,不能让迭代过程无休止地重复执行下去。通常可分为如下两种情况来控制迭代过程:
所需的选代次数是个确定的值,可以计算出来。可以构建一个固定次数的循环来实现对迭代过程的控制;
所需的迭代次数无法确定,需要过步分析出用来结束迭代过程的条件。
求平方根
在屏幕中输入一个数字,可以求出其平方根。
算法分析:
求平方根的迭代公式: x1=1/2(x0+a/x0).
(1)设置一个初值x0对作为a的平方根值,在我们的程序中取a/2作为a的初值;利用迭代公式求出一个x1,此值与真正的a的平方根值相比会有很大的误差。
(2)把新求得的x1代入x0,用这个新的x0再去求出一个新的x1。
(3)利用选代公式再求出一个新的x1的值,即用新的x0求出一个新的平方根值x1,此值将更加趋近于真正的平方根值。
(4)比较前后两次求得的平方根值x0和x1,如果它们的差值小于我们指定的值,即达到我们要求的精度,则认为x1就是a的平方根值,去执行步骤5;否则执行步骤2, 即循环进行迭代。
(5)输出结果。
迭代法常用于求方程或方程组的近似根,假设方程为f(x)=0,用某种数学方法导出等价的形式x=g (x),然后按以下步骤执行:
(1)选一个方程的近似根, 赋给变量x0。
(2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于x0。
(3)x0与x1的差的绝对值小于制定的精度要求,重复步骤(2)的计算。
如果方程有根,并且用上述方法计算出来了近似的根序列,则按照上述方法得到的x0就被认为是方程的跟。
#include<stdio.h>
#include<math.h>
void main()
{
double a,x0,x1;
printf("Input a:\n");
scanf("%lf",&a);
if(a<0){
printf("Error!\n");
}
else{
x0=a/2;
x1=(x0+a/x0)/2;
do{
x0=x1;
x1=(x0+a/x0)/2;
}while(fabs(x0-x1)>=1e-6);
}
printf("result:\n");
printf("sqrt(%g)=%g\n",a,x1);
getchar();
}