Интеграл, используя правило Симпсона


Как ответ на эту проблему:

Упражнение 1.29

Правило Симпсона-это более точный метод численного интеграции, чем метод на рисунке выше. Используя Симпсон Правило, интеграл от функции f между A и B аппроксимируется как (ч / 3) * (y_0 + 4y_1 + 2y_2 + 4y_3 + 2y_4 + ... + 2y_(н-2) + 4y_(Н-1) + y_n

где h = (Б - а)/n, для некоторых даже целое число n, и YK = F(А + х). (Увеличением N увеличивается точность приближения.) Определить процедура, которая принимает в качестве аргументов Ф А, B, и N и возвращает значение Интеграл, вычисленный с помощью Симпсона Правило. Использовать процедуру для интеграции куб между 0 и 1 (при n = 100 и Н = 1000), и сравнить результаты те интегрального процедуры показаны выше.

Я написал следующее решение:

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

Что вы думаете?



1365
2
задан 30 марта 2011 в 04:03 Источник Поделиться
Комментарии
1 ответ

Когда вы называете сумму, убедитесь, что вы начать с 1 (а не 0). В противном случае вы получите сообщение об ошибке от + 2 y_0 ч / 3. В случае (Симпсоны-рулят куб 1 2 1000), эта ошибка 0.000666....

Другой способ переписать серию на группы четные и нечетные термы вместе, кроме первого и последнего условия.

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

Это дает нам еще одну возможную реализацию:

(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
ответ дан 31 марта 2011 в 01:03 Источник Поделиться