Code Review
Compare your solutions
#| 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 |#