迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。迭代算法是用计算机解决问题的一种基本方法。
利用迭代算法解决问题,需要以下三个步骤:
1.确定迭代变量
在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
2.建立迭代关系式
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以顺推或倒推的方法来完成。
3.对迭代过程进行控制
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代 次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情 况,需要进一步分析出用来结束迭代过程的条件。
头文件:
/*****************************************************************************************************
*Copyright:Yue Workstation
*
*FileName:Iterate.h
*
*Function:迭代算法数据定义
*
*Author:Abel Lee
*
*CreateOn:2012-2-19
*
*Log:2012-2-19 由Abel Lee创建
*****************************************************************************************************/
#ifndef ITERATE_H
#define ITERATE_H
#include "global.h"
#define Epsilon 1.0E-6
int GetTheEquationRoot(void);
float MySqrt(float x);
#endif
源文件:
/*****************************************************************************************************
*Copyright:Yue Workstation
*
*FileName:Iterate.c
*
*Function: 迭代法的应用实例
*
*Author:Abel Lee
*
*CreateOn:2012-2-19
*
*Log:2011-5-3 由Abel Lee创建
*****************************************************************************************************/
#include "../inc/Iterate.h"
#include <math.h>
/****************************************************************************************************
*Function Name: GetTheEquationRoot
*
*Function: 用牛顿迭代法求方程2*x*x*x-4*x*x+3*x-6 = 0的根
*
*Parameter: 无
*
*Return Value:成功返回0,失败返回-1
*
*Author:Abel Lee
*
*Log:2012-2-19
***************************************************************************************************/
int GetTheEquationRoot(void)
{
float x1,x0=1.5;
x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);
while(fabs(x1-x0>=Epsilon))
{
x0=x1;
x1=x0-(2*x0*x0*x0-4*x0*x0+3*x0-6)/(6*x0*x0-8*x0+3);
}
printf("The Root is:%f\n",x1);
return 0;
}
/****************************************************************************************************
*Function Name: MySqrt
*
*Function: 迭代法求一个数的平方根
*
*Parameter: x:要求平方根的数
*
*Return Value:成功返回根植,失败返回-1
*
*Author:Abel Lee
*
*Log:2012-2-19
***************************************************************************************************/
float MySqrt(float x)
{
float a,x0,x1;
if(x < 0)
{
return -1;
}
a = x;
x0=a/2;
x1=(x0+a/x0)/2;
while(fabs(x1-x0)>=Epsilon)
{
x0 = x1;
x1=(x0+a/x0)/2;
}
return x1;
}
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。