Advertisement
Guest User

Untitled

a guest
Nov 27th, 2019
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (ns lab5.integral)
  2.  
  3. (defn trapezoid-area
  4.   "Найти площадь трапеции функции с основаниями f(a) и f(b) и высотой (b - a)"
  5.   [f a b] (* (/ (- b a) 2) (+ (f a) (f b)))
  6. )
  7.  
  8. (defn recursive-integrate
  9.   "Рекурсивное интегрирование функции f, h - шаг рекурсии"
  10.   [f h] (
  11.     fn [mem-integrate n] (
  12.       let [inner-integrate (fn [n] (mem-integrate mem-integrate n))] (
  13.         let [previous_n (- n 1) a (* previous_n h) b (* n h)] (
  14.           if
  15.             (= n 1) (trapezoid-area f 0 h)
  16.             (+ (trapezoid-area f a b) (inner-integrate previous_n))
  17.         )
  18.       )
  19.     )
  20.   )
  21. )
  22.  
  23. (defn do-integrate
  24.   "Функция возвращает функцию, которая вычисляет интеграл функции f
  25.   методом трапеций с шагом h в точке x = n * h"
  26.   [f h] (
  27.     let [mem-integrate (memoize (recursive-integrate f h))] (
  28.       partial mem-integrate mem-integrate
  29.     )
  30.   )
  31. )
  32.  
  33. (defn make-integral
  34.   "Проинтегрировать функцию f методом трапеций с постоянным шагом от 0 до x"
  35.   [f h] (
  36.     let [integrate-n (do-integrate f h)] (
  37.       fn [x] (let [
  38.           n (int (Math/floor (/ x h)))
  39.           a (* n h)
  40.           b x
  41.         ] (+ (trapezoid-area f a b) (integrate-n n))
  42.       )
  43.     )
  44.   )
  45. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement