首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用Simpson法则的积分

利用Simpson法则的积分
EN

Code Review用户
提问于 2011-03-30 04:07:50
回答 1查看 1.8K关注 0票数 2

作为这个问题的答案:

练习1.29辛普森法则是一种比上述方法更精确的数值积分方法。利用辛普森法则,将a与b之间函数f的积分近似为(h / 3) * (y_0 + 4y_1 + 2y_2 + 4y_3 + 2y_4 + 2y_(n-2) + 4y_(n-1) + y_n ),其中h= (b - a)/n为偶数n,yk = f(a + kh).(n的增加提高了近似的精度。)定义一个以参数f、a、b和n作为参数的过程,并返回使用Simpson规则计算的积分的值。使用您的过程在0到1之间集成多维数据集(n= 100和n= 1000),并将结果与上面显示的积分过程的结果进行比较。

我编写了以下解决方案:

代码语言:javascript
复制
(define (sum term a next b)
  (define (iter a result)
    (if (> a b) 
        result
        (iter (next a) (+ (term a) result)))
    ) (iter a 0))

(define (simpsons-rule f a b n)
  (let ((h (/ (- b a) n)))
    (define (y_k k) (f (+ a (* k h))))
    (define (even n) (= (remainder n 2) 0))
    (define (term n) (* (if (even n) 2.0 4.0) (y_k n)))
    (define (next n) (+ n 1))
    (* (/ h 3.0) (+ (y_k 0.0) (sum term 0.0 next (- n 1.0)) (y_k n)))))

(define (cube x) (* x x x))

你认为如何?

EN

回答 1

Code Review用户

回答已采纳

发布于 2011-03-31 13:41:59

当您调用sum时,请确保以1开头(而不是0)。否则,您将得到+2 y_0 h/ 3的错误。如果是(simpsons-rule cube 1 2 1000),则此错误为0.000666.

重写该系列的另一种方法是将偶数项和奇数项组合在一起,不包括第一项和最后一项。

(h / 3) * (y_0 + y_n +4* (y_1 + y_3 +.+y_n 1)+2* (y_2 + y_4 +.+ y_n-2))

这给了我们另一个可能的实现:

代码语言:javascript
复制
(define (simpsons-rule f a b n)
  (define h (/ (- b a) n))
  (define (y-k k) (f (+ a (* k h))))
  (define (next n) (+ n 2))
  (* (/ h 3.0) (+ (y-k 0) (y-k n) (* 4 (sum y-k 1 next (- n 1))) (* 2 (sum y-k 2 next (- n 2))))))
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/1538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档