SICP習題1.45 為什麼做average damp的次數需要大於等於log2n
簡單粗暴的標題,這個推導是我看了知乎的兩篇文章之後,結合自己的理解寫的,多畫了幾個影象,力求通俗易懂
知乎的參考文章如下
https://zhuanlan.zhihu.com/p/25601871
https://www.zhihu.com/question/28838814/answer/42283723
最初我們需要求解的fixed-point函式如下
經過m次average damp後,fixed-point函式變為
每次fixed-point迭代計算,第k次迭代可以寫成如下形式,直到迭代結束
以 作為自變數,變換一下上面的公式,可以得到函式,這條直線的斜率為
每次迭代求 就等同於求函式的零點
設函式,該函式零點就是我們所要求的平方根,去掉的下標k+1,得到
為了更好地理解,以一個例子代入,求解,初始值為1
1、不做average damp
兩個函式是這樣
第一次迭代,,得出
第二次迭代, ,得出
第三次迭代, ,得出
陷入了死迴圈,非常夭壽
2、做一次average damp
兩個函式是這樣
第一次迭代,,得出
第二次迭代, ,得出
第三次迭代, ,得出
每次迭代的直線如下,可以看到直線的零點和曲線的零點越來越接近
對比一下上面的兩個圖的區別,不做average damp的時候,直線是在曲線零點的兩邊晃來晃去導致震盪不收斂,做了average damp後,直線一直在曲線的一側,慢慢貼近
如何保證直線不在曲線零點兩邊晃來晃去呢
看一下知乎大神給出的這個圖,藍色曲線表示,其他直線表示,紅點表示這個點,曲線和直線是必然通過這個點的,代入函式驗證一下就可以知道
現在看綠線,綠線的零點就是下一次的,和這次的分佈在了曲線零點的兩端,這兩個y值我用綠點標出來了,由上述分析可以知道,每次迭代y都分佈在曲線零點兩端就會引起震盪,所以綠線這種情況是不能收斂的,紅線和黃線的零點一直分佈在曲線零點的一側,可以收斂
很直觀可以看出來,只要每次在曲線直線交點處,直線的斜率大於等於曲線斜率即可,上面已經說了交點就是
曲線斜率為,在交點處,斜率為
直線斜率為
因此滿足,即