/
3_65.scm
31 lines (27 loc) · 1009 Bytes
/
3_65.scm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(load "3_55.scm")
(load "3_64.scm")
(define (ln-summands n)
(cons-stream (/ 1.0 n)
(stream-map - (ln-summands (+ n 1)))))
(define ln-stream
(partial-sums (ln-summands 1)))
(define (euler-transform s)
(let ((s0 (stream-ref s 0)) ; Sn-1
(s1 (stream-ref s 1)) ; Sn
(s2 (stream-ref s 2))) ; Sn+1
(cons-stream (- s2 (/ (square (- s2 s1))
(+ s0 (* -2 s1) s2)))
(euler-transform (stream-cdr s)))))
(define (make-tableau transform s)
(cons-stream s
(make-tableau transform
(transform s))))
(define (accelerated-sequence transform s)
(stream-map stream-car
(make-tableau transform s)))
(define eul (euler-transform ln-stream))
(define acc (accelerated-sequence euler-transform
ln-stream))
;(stream-ref eul 10)
;(stream-ref acc 10)
; accelerated-sequence returns NaN after 10th element of the sequence