(define factorials (cons-stream 1 (mul-streams factorials integers)))
(stream-cdr s2)))))))))
;;; --------------- 3.59 -----------------------------
a. 流的每个元素除以整数就可以
(define (integrate-series stream)
(div-streams stream integers))
b. 上面定义的 (integrate-series stream) 结果可认为是stream流的积分(缺少常数项)。
ex的倒数等于ex,而ex的常数项为1,所以ex也等于 1加上ex的积分
(define exp-series
(cons-stream 1 (integrate-series exp-series)))
由于sin的倒数是cos, 所以sin就是 cos的倒数加上一个常数项, 有 sin的多项式定义可得:
(define sine-series
(cons-stream 0 (integrate-series cosine-series)))
同理获得cos的定义,cos和sin两个级数递归调用形成无限流
(define cosine-series
(cons-stream 1 (stream-map (lambda (x) (- x))
(integrate-series sine-series))))
;;; --------------- 3.60 -----------------------------
两个级数相乘,等于级数s1的每一项与s2中的每一项相乘(注意:不是一对一的相乘)
方法是: s1和s2相乘所得结果的第一项肯定是s1的第一项乘以s2的第一项,
至于第二项后的结果为:s1的第一项与s2的第二项以及之后的项相乘之和, 再加上s1除去第一项与s2的所有项相乘所得结果。
(define (mul-series s1 s2)
(cons-stream (*
(stream-car s1)
(stream-car s2))
(stream-map + (scale-stream
(stream-cdr s2)
(stream-car s1))
(mul-series
(stream-cdr s1)
s2))))
使用sin2x + cos2x = 1验证:
define one (add-streams (mul-series sine-series sine-series)
(mul-series cosine-series cosine-series)))
(stream-ref one 0) ==> 1
(stream-ref one N) ==> 0 ; N表示除了0以外的其他数
;;; --------------- 3.61 -----------------------
;;; 定义常数项为1的级数的倒数
(define (invert-unit-series s)
(define invert-dummy
(cons-stream 1 (scale-stream
(mul-series (stream-cdr s) invert-dummy)
-1)))
invert-dummy)
;;; -------------- 3..62 ---------------------
;;; 先定义第一项非零的级数的倒数
(define (invert-series s)
(let ((constant-term (stream-car s)))
(if (= constant-term 0)
(error "DIV-SERIES denom constant term can't be zero")
(scale-stream (invert-unit-series
(scale-stream s (/ 1 constant-term)))
constant-term))))
;;; 两个级数相除等级分子的级数乘以分母的级数
(define (div-series num denom)
(mul-series num
(invert-series denom)))
;;; 定义tan的级数, tan = sin / cos
(define tan-series (div-series sine-series cosine-series))
;;; 下面显示 tan级数前10项的值
(stream-ref tan-series 0)
1 ]=>
;Value: 0
(stream-ref tan-series 1)
1 ]=>
;Value: 1
(stream-ref tan-series 2)
1 ]=>
;Value: 0
(stream-ref tan-series 3)
1 ]=>
;Value: 1/3
(stream-ref tan-series 4)
1 ]=>
;Value: 0
(stream-ref tan-series 5)
1 ]=>
;Value: 2/15
(stream-ref tan-series 6)
1 ]=>
;Value: 0
(stream-ref tan-series 7)
1 ]=>
;Value: 17/315
(stream-ref tan-series 8)
1 ]=>
;Value: 0
(stream-ref tan-series 9)
1 ]=>
;Value: 62/2835
1 ]=>
参考: http://wizardbook.wordpress.com/solutions-index/ ------- SICP参考答案