美文网首页
无穷流和幂级数

无穷流和幂级数

作者: 家中古词 | 来源:发表于2018-11-30 20:45 被阅读4次

    幂级数可以用级数的系数表示。

    e^x = 1 + x + \frac{x^2}{2} + \frac{x^3}{6} + \frac{x^4}{24} + \dots

    可以用:

    (1 1 1/2 1/6 1/24 ...)
    

    表示。将这些系数看作一个无穷的流,则可以用无穷流表示幂级数。

    幂级数的积分

    a_0 + xa_1 + x^2a_2 + ... 的积分是 c + a_0x + \frac{a_1x^2}{2} + \frac{a_2x^3}{3}。用无穷流表示除了 c 之外的系数,用程序表示是:

    (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)))))
    

    由于把无穷对象看作有穷对象,计算级数的乘积不再需要复杂的逻辑。

    验证

    可以验证 \sin^2(x) + \cos^2(x) = 1 这个定理。

    (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)
    

    人生苦短。

    相关文章

      网友评论

          本文标题:无穷流和幂级数

          本文链接:https://www.haomeiwen.com/subject/oxrkcqtx.html