ex1-30
本題要求比較brute-force method 以及 golden method 計算單峯函數 的極大值所需要的函數值計算次數
我們先計算brute-force method
時間爲2log2 (L/T) 其中L爲初始區間長,T爲容錯區間長
我們再計算golden method
時間爲log 1/(1- (golden-ratio)^2) (L/T)
化簡後我們得到
2log (5^(1/2) +1)(L/T)
我們可以發現golden method 快於 brute-force
ex1-31
利用f(x) f(f(x))...的思路尋找fixed-point
(define (fixed-point f guess-value)
(let
((distance (abs (- guess-value (f guess-value)))))
(if (< distance 0.01) guess-value
(fixed-point f (f guess-value)))))
比較簡單,只是,這裏有個問題,例如我取f(x)=x*x,我取guess-value爲10 那麼這個差值將會越來越大,顯然是不合理的
那麼我們嘗試一下如果下一個distance比該distance更大那麼我們將參數減半
(define (fixed-point f guess-value)
(let ((fx (f guess-value)))
(let
((distance (abs (- guess-value fx)))
(next-distance (abs (- fx (f fx)))))
(if (< distance 0.01) guess-value
(if (< distance next-distance) (fixed-point f fx) (fixed-point f (/ guess-value 2)))))))
看起來思路還可以,我們用x^2這個函數進行驗證,我們用5來驗證,
5^2=25
25^2=625
取2.5進行下一步
2.5^2=6.25
6.25^=..
取1.25
取.625
停到這裏我們不計算了
兩種可能都是離1越來越遠
所以我們的答案是錯的!
看來要選取一個合適的方式挺麻煩的.
這條路走不通我們換種思考方式,我們可以看到distance=f(x)-x 那麼我們構造一個新的函數g(x)=f(x)-x
這樣我們只要求0點就可以了(取guess兩側一個足夠大的範圍構造ab),0點求法參考textbook本章前面一個例子
雖然我們沒有利用原題的思想,但是我們順利發現原題思想漏洞,併成功解決問題
另外關於如何選取合適的方法還是等哪天有心情了再來想想吧= =