2013-09-19 3 views
0

Может ли кто-нибудь помочь мне написать тело метода для правила Симпсона в схеме? Следующее - это то, что у меня есть до сих пор, но я не знаю, должен ли я рекурсивно решать эту проблему или использовать другой метод.Правило simpson в схеме

(define (sum-i term a b) 
(if (= a b) 
    (term b) 
    (+ (term a) (sum-i term (+ a 1) b)))) 

(sum-i (lambda (x) x) 0 1) 
(sum-i (lambda (x) (* x x)) 0 1) 
(sum-i (lambda (x) (* x x x x)) 0 1) 

(define (simpsons-rule f a b n) 
    (let ((h (/ (- b a) n))) 
    (define (y_k k) (f (+ a (* k h)))) 
+4

http://www.ccs.neu.edu/home/dorai/ty-scheme/ty-scheme-ZH-22.html –

+0

Я обсуждал правило Симпсона в [моем блоге] (http://programmingpraxis.com/ 2010/02/09/числовая интеграция /). – user448810

ответ

1

Ваше близко, что я дам вам случаи в функции вы даете и аргумент слишком сумма, и как настроить вызов суммы.

Вы можете настроить рекурсивно, с рекурсивной функцией, определенной вместо f и вызывая ее там, где ее суммировать.

(define (simpsons-rule f a b n) 
    (define h (/ (- b a) n)) 
    (define Y_k (lambda (k) (f (+ a (* k h))))) 
    (define (f x) 
    (cond ((or (= x 0) (= x n)) ...) 
      ((even? x) ...) 
      (else ...))) 
    (* (/ h 3) 
     (sum f 0 plus1 n))) 
1

# Теперь я пишу функцию, которая вычислить интегральное значение для simpons1/3rule: #I хотят интегрировать эту (х^3-7x^2 + 10) от 0 до 100 сказать

ftn<-function(x){ 
    return((x^3-7*x^2+10)) 
} 
    simpons<-function(a,b,ftn,n){ 
    h<-(b-a)/n 
    fa<-ftn(a) 
    fb<-ftn(b) 
    sum1<-0 
    i<-1 
    while(i<=n-1){ 
    sum1<-sum1+ftn(a+i*h) 
i<-i+2 
    } 
    j<-2 
    sum2<-0 
    while(j<=n-2){ 
    sum2<-sum2+ftn(a+j*h) 
    j<-j+2 
    } 
    s1<-h/3 
    simp<-s1*(fa+fb+4*sum1+2*sum2) 
    return(simp) 
    } 
Смежные вопросы