您好,登錄后才能下訂單哦!
迭代法也稱輾轉(zhuǎn)法,是一種不斷用變量的舊值遞推新值的過程,跟迭代法相對應(yīng)的是直接法(或者稱為一次解法),即一次性解決問題。迭代法又分為精確迭代和近似迭代?!岸址ā焙汀芭nD迭代法”屬于近似迭代法。迭代算法是用計(jì)算機(jī)解決問題的一種基本方法。
利用迭代算法解決問題,需要以下三個(gè)步驟:
1.確定迭代變量
在可以用迭代算法解決的問題中,至少存在一個(gè)直接或間接地不斷由舊值遞推出新值的變量,這個(gè)變量就是迭代變量。
2.建立迭代關(guān)系式
所謂迭代關(guān)系式,指如何從變量的前一個(gè)值推出其下一個(gè)值的公式(或關(guān)系)。迭代關(guān)系式的建立是解決迭代問題的關(guān)鍵,通常可以順推或倒推的方法來完成。
3.對迭代過程進(jìn)行控制
在什么時(shí)候結(jié)束迭代過程?這是編寫迭代程序必須考慮的問題。不能讓迭代過程無休止地重復(fù)執(zhí)行下去。迭代過程的控制通??煞譃閮煞N情況:一種是所需的迭代 次數(shù)是個(gè)確定的值,可以計(jì)算出來;另一種是所需的迭代次數(shù)無法確定。對于前一種情況,可以構(gòu)建一個(gè)固定次數(shù)的循環(huán)來實(shí)現(xiàn)對迭代過程的控制;對于后一種情 況,需要進(jìn)一步分析出用來結(jié)束迭代過程的條件。
頭文件:
/*****************************************************************************************************
*Copyright:Yue Workstation
*
*FileName:Iterate.h
*
*Function:迭代算法數(shù)據(jù)定義
*
*Author:Abel Lee
*
*CreateOn:2012-2-19
*
*Log:2012-2-19 由Abel Lee創(chuàng)建
*****************************************************************************************************/
#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: 迭代法的應(yīng)用實(shí)例
*
*Author:Abel Lee
*
*CreateOn:2012-2-19
*
*Log:2011-5-3 由Abel Lee創(chuàng)建
*****************************************************************************************************/
#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: 迭代法求一個(gè)數(shù)的平方根
*
*Parameter: x:要求平方根的數(shù)
*
*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;
}
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。