Код Ревью

Сравни свои решения

    #| BEGIN (Введите свое решение) |#
(define (integral f a b dx)
  (define (add-dx x) (+ x dx))
  (* (sum f (+ a (/ dx 2)) add-dx b)
     dx))

(define (simpson-rule f a b n))
#| END |#
    #| BEGIN (Введите свое решение) |#
(define (integral f a b dx)
  (define (add-dx x) (+ x dx))
  (* (sum f (+ a (/ dx 2)) add-dx b)
     dx))

(define (simpson-integral f a b n))
#| END |#
    #| BEGIN (Введите свое решение) |#
;; (define (cube a) (* a a a))

;; (define (sum term a next b)
;;   (if (> a b)
;;       0
;;       (+ (term a)
;;          (sum term (next a) next b))))

;; (define (integral f a b dx)
;;   (define (add-dx x) (+ x dx))
;;   (* (sum f (+ a (/ dx 2)) add-dx b)
;;      dx))

;; (define (simpson-integral f a b n))
;; chat-gpt
(define (simpson f a b n)
  (if (odd? n)
      (error "n must be an even integer")
      (let* ((h (/ (- b a) (exact->inexact n))) ; Используем точное дробное деление
             (y0 (f a))
             (yn (f b))
             (sum-odd (apply + (map (lambda (k) (* 4 (f (+ a (* k h))))) ; Нечетные индексы
                                 (build-list (/ n 2) (lambda (i) (+ 1 (* 2 i)))))))
             (sum-even (apply + (map (lambda (k) (* 2 (f (+ a (* k h))))) ; Четные индексы
                                  (build-list (/ n 2) (lambda (i) (+ 2 (* 2 i))))))))
        (* (/ h 3) (+ y0 yn sum-odd sum-even)))))

(define (cube-fn x) (* x x x)) ; Функция куба

;; Интеграция cube-fn(x) от 0 до 1
(define integral-n100 (exact->inexact (simpson cube-fn 0 1 100)))  ; Приводим результат к вещественному числу
(define integral-n1000 (exact->inexact (simpson cube-fn 0 1 1000))) ; Аналогично

(display (string-append "Integral of cube from 0 to 1 with n=100: " (number->string integral-n100) "\n"))
(display (string-append "Integral of cube from 0 to 1 with n=1000: " (number->string integral-n1000) "\n"))




#| END |#
    #| BEGIN (Введите свое решение) |#
(define (integral f a b dx)
  (define (add-dx x) (+ x dx))
  (* (sum f (+ a (/ dx 2)) add-dx b)
     dx))

(define (simpson-rule f a b n))
#| END |#
    #| BEGIN (Введите свое решение) |#
(define (integral f a b dx)
  (define (add-dx x) (+ x dx))
  (* (sum f (+ a (/ dx 2)) add-dx b)
     dx))

(define (simpson-integral f a b n))
#| END |#
    #| BEGIN (Введите свое решение) |#
;; (define (cube a) (* a a a))

;; (define (sum term a next b)
;;   (if (> a b)
;;       0
;;       (+ (term a)
;;          (sum term (next a) next b))))

;; (define (integral f a b dx)
;;   (define (add-dx x) (+ x dx))
;;   (* (sum f (+ a (/ dx 2)) add-dx b)
;;      dx))

;; (define (simpson-integral f a b n))
;; chat-gpt
(define (simpson f a b n)
  (if (odd? n)
      (error "n must be an even integer")
      (let* ((h (/ (- b a) (exact->inexact n))) ; Используем точное дробное деление
             (y0 (f a))
             (yn (f b))
             (sum-odd (apply + (map (lambda (k) (* 4 (f (+ a (* k h))))) ; Нечетные индексы
                                 (build-list (/ n 2) (lambda (i) (+ 1 (* 2 i)))))))
             (sum-even (apply + (map (lambda (k) (* 2 (f (+ a (* k h))))) ; Четные индексы
                                  (build-list (/ n 2) (lambda (i) (+ 2 (* 2 i))))))))
        (* (/ h 3) (+ y0 yn sum-odd sum-even)))))

(define (cube-fn x) (* x x x)) ; Функция куба

;; Интеграция cube-fn(x) от 0 до 1
(define integral-n100 (exact->inexact (simpson cube-fn 0 1 100)))  ; Приводим результат к вещественному числу
(define integral-n1000 (exact->inexact (simpson cube-fn 0 1 1000))) ; Аналогично

(display (string-append "Integral of cube from 0 to 1 with n=100: " (number->string integral-n100) "\n"))
(display (string-append "Integral of cube from 0 to 1 with n=1000: " (number->string integral-n1000) "\n"))




#| END |#