算法學習--日記(牛頓迭代法)

牛頓迭代法

概念理解

牛頓迭代法

牛頓迭代法能夠使用函數極限角度無限迭代趨近於某一點理解。
迭代算法解決問題,須要作好3個方面的工做:算法

  1. 肯定迭代變量 在能夠用迭代算法解決的問題中,至少存在一個可直接或間接地不斷由舊值遞推出新值的變量,這個變量就是迭代變量。
  2. 創建迭代關係式 所謂迭代關係式,指如何從變量的前一個值推出其下一個值的公式(或關係)。迭代關係式的創建是解決迭代問題的關鍵,一般可使用遞推或倒推的方法來完成。
  3. 對迭代過程進行控制 在何時結束迭代過程?這是編寫迭代程序必須考慮的問題。不能讓迭代過程無休止地執行下去。迭代過程的控制一般可分爲兩種狀況:一種是所需的迭代次數是個肯定的值,能夠計算出來;另外一種是所需的迭代次數沒法肯定。對於前一種狀況,能夠構建一個固定次數的循環來實現對迭代過程的控制;對於後一種狀況,須要進一步分析得出可用來結束迭代過程的條件。

實例:

1. 歐幾里德算法 展轉相除法

概念:ide

歐幾裏徳算法

算法證實:函數

歐幾里德算法證實

整理:code

  • 肯定迭代變量 a,b
  • 創建迭代關係式 gcd(a,b) = gcd(b,a mod b), r = (參1)%(參2)
  • 對迭代過程進行控制 條件 r = 0;結果爲2參數 即爲最大公約數。

2. 斐波那契數列

定義:ci

還有一個很典型的例子是斐波那契(Fibonacci)數列。斐波那契數列爲:0、一、一、二、三、五、八、1三、2一、…,即 fib⑴=0; fib⑵=1;fib(n)=fib(n-1)+fib(n-2) (當n>2時)。
在n>2時,fib(n)總能夠由fib(n-1)和fib(n-2)獲得,由舊值遞推出新值,這是一個典型的迭代關係,因此咱們能夠考慮迭代算法。get

int Fib(int n) //斐波那契(Fibonacci)數列
{
	if (n < 1)/*預防錯誤*/
	return 0;
	if (n == 1 || n == 2)/*特殊值,無需迭代*/
	return 1;
	int f1 = 1,f2 = 1,fn;/*迭代變量*/
	int i;
	for(i=3; i<=n; ++i)/*用i的值來限制迭代的次數*/
	{
	fn = f1 + f2; /*迭代關係式*/
	f1 = f2;//f1和f2迭代前進,其中f2在f1的前面
	f2 = fn;
	}
	return fn;
}

固然 斐波那契數列 得算法豈止一種。
參見 斐波那契數列it

相關文章
相關標籤/搜索