SICPを読む(31) 1.3.4(2) Newton法
微分
微分ってホントに小さく分割して傾きを求めるのね。
(define dx 0.00001) (define (deriv g) (lambda (x) (/ (- (g (+ x dx)) (g x)) dx)))
まんまですね・・・。これも新たな手続きを生み出してる。
Newton法
で、この微分を使ってNewton法を定義する。
(define (newton-transform g) (lambda (x) (- x (/ (g x) ((deriv g) x))))) (define (newtons-method g guess) (fixed-point (newton-transform g) guess)) (define (sqrt x) (newtons-method (lambda (y) (- (square y) x)) 1.0)) (square (sqrt 10)) ; 検算
なんかややこしいが、最終的には1.1.8の様になる。
抽象化を進めたことで、sqrt以外の関数もNewton法で解けるようになった!!
抽象と第一手続き
もっともっと抽象化。ややこしい。
抽象化レベルを選ぶ必要もある。