无穷流和幂级数
2018-11-30 本文已影响4人
家中古词
幂级数可以用级数的系数表示。
可以用:
(1 1 1/2 1/6 1/24 ...)
表示。将这些系数看作一个无穷的流,则可以用无穷流表示幂级数。
幂级数的积分
的积分是 。用无穷流表示除了 之外的系数,用程序表示是:
(define (integrate-series s)
(define (get s n)
(cons-stream (/ (stream-car s) n)
(get (stream-cdr s) (+ n 1))))
(get s 1))
那么,(cons-stream c (integrate-series s))
就是 s
的一个积分函数。
指数函数
指数函数具有求导不变的特性,利用这一点,可以得到指数函数的级数。
(define exp-series
(cons-stream 1 (integrate-series exp-series)))
计算机完成了超出多数人想象的更加抽象的计算。
正弦和余弦函数
(define sin-series
(cons-stream 0 (integrate-series cos-series)))
(define cos-series
(cons-stream 1 (stream-scale (integrate-series sin-series) -1)))
这依赖解释器下文有关。不然则需要前向声明之类的技术。
级数运算
利用流的运算,很容易建立级数的运算。
(define add-series add-streams)
(define (mul-series s1 s2)
(let* ((s1car (stream-car s1))
(s1cdr (stream-cdr s1))
(s2-x-s1car (stream-scale s2 s1car)))
(cons-stream (stream-car s2-x-s1car)
(add-streams (stream-cdr s2-x-s1car)
(mul-series s1cdr s2)))))
由于把无穷对象看作有穷对象,计算级数的乘积不再需要复杂的逻辑。
验证
可以验证 这个定理。
(define should-be-one
(add-series (mul-series sin-series sin-series)
(mul-series cos-series cos-series)))
(print-first-n should-be-one 10)
人生苦短。