Wednesday, June 3, 2009

Ex-1.19

Applying Tpq first time
a->bq + aq + ap
b->bp + aq

Applying Tpq second time
a-> (bp + aq)q + (bq + aq + ap)q + (bq + aq + ap)p
-> b(2pq + q2) + a(2q2 + 2pq + p2)
-> b(2pq + q2) + a(2pq + q2) + a(p2 + q2)

b-> (bp + aq)p + (bq + aq + ap)q
-> b(p2 + q2) + a(2pq + q2)

clearly
p' = p2 + q2
q' = q2 + 2pq

(define (fib n)
(fib-iter 1 0 0 1 n))
(define (fib-iter a b p q count)
(cond ((= count 0) b)
((even? count)
(fib-iter a
b
(+ (square p) (square q)) ; compute p'
(+ (square q) (* 2 p q)) ; compute q'
(/ count 2)))
(else (fib-iter (+ (* b q) (* a q) (* a p))
(+ (* b p) (* a q))
p
q
(- count 1)))))


Note: Whoa, take a moment to notice how this example generalized the approach of fast-expt to reach logarithmic number of steps using square to fib.

No comments:

Post a Comment