SICP問題3.62
二つのべき級数を割る手続きdiv-seriesを定義せよ。
分母が零の定数項を持つならdiv-seriesはエラーを出すこと。
div-seriesを3.59の結果とともに使い、正接のべき級数を生成する方法を述べよ。
という問題でdiv-seriesは
(define (div-series s1 s2) (mul-series s1 (invert-unit-series s2)))
で良いkかと思ったけど、ゼロ割のエラーとか入らないし、これじゃダメっぽい。
ということでベキ級数の商についてググってみて引っかかった
3.4 積、商、合成関数
すなわち
であるときに
を利用して展開されることになる。これにをかければのベキ級数が得られる。
辺りを参考にして考えてみると
(define (div-series s1 s2) (if (= (stream-car s2) 0) (error "-- DIV-SERIES divide zero") (mul-series s1 (scale-stream (invert-unit-series s2) (/ 1 (stream-car s2))))))
という感じかなぁ。
で正接のベキ級数ということだが、これは
なので
(define tangent-series (div-series sine-series cosine-series))
で良いはず。
テスト
(stream-ref tangent-series 0) ; 0 (stream-ref tangent-series 1) ; 1 (stream-ref tangent-series 2) ; 0 (stream-ref tangent-series 3) ; 1/3 (stream-ref tangent-series 4) ; 0 (stream-ref tangent-series 5) ; 2/15
OKなのか?さっぱり分からない。