您好,登錄后才能下訂單哦!
迭代法也稱輾轉法,是一種不斷用變量的舊值遞推新值的過程,跟迭代法相對應的是直接法(或者稱為一次解法),即一次性解決問題。迭代法又分為精確迭代和近似迭代。“二分法”和“牛頓迭代法”屬于近似迭代法。迭代算法是用計算機解決問題的一種基本方法。
利用迭代算法解決問題,需要以下三個步驟:
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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。