2015/12/17

SICP 問題 3.80

なかなかテスト通らなくて困りました.
結局iLを書く位置をvCの次にしたら動きました.
元々そこにはdvCがあって,
(scale-stream iL (/ -1 C)))がiLの初期化前に行われたのが原因でした.

(define (RLC R L C dt)
  (lambda (vC0 iL0)
    (define vC (integral (delay dvC) vC0 dt))
    (define iL (integral (delay diL) iL0 dt))
    (define dvC (scale-stream iL (/ -1 C)))
    (define diL (add-streams (scale-stream iL (- (/ R L)))
                             (scale-stream vC (/ 1 L))))
    (stream-map (lambda (x y) (cons x y)) vC iL)))

(define RLC1 (RLC 1 1 0.2 0.1))
gosh> (stream-head (RLC1 10 0) 10)
(10 . 0)
(10.0 . 1.0)
(9.5 . 1.9)
(8.55 . 2.66)
(7.220000000000001 . 3.249)
(5.5955 . 3.6461)
(3.77245 . 3.84104)
(1.8519299999999999 . 3.834181)
(-0.0651605000000004 . 3.6359559)
(-1.8831384500000004 . 3.2658442599999997)
done

© 2022 wat-aro