Вычисление определенного интеграла - Lisp
Формулировка задачи:
Помогите пожалуйста, нужно разработать функцию которая находит определенный интеграл в полиномиальном виде.
Подробнее http://www.cyberforum.ru/order-program/thread1676354.html
Спасибо.
Решение задачи: «Вычисление определенного интеграла»
textual
Листинг программы
(defun integr-poly (polynom a b) (let* ((pervoobr (mapcar #'(lambda (x) ;; вычисление первообразной (let ((q (car x)) (n (cadr x))) (list (/ q (+ n 1)) (+ n 1)))) polynom)) ;; Первообразная на нижнем пределе (v1 (apply '+ (mapcar #'(lambda (x) (* (car x) (^ a (cadr x)))) pervoobr))) ;; Первообразная на верхнем пределе (v2 (apply '+ (mapcar #'(lambda (x) (* (car x) (^ b (cadr x)))) pervoobr)))) ;; Формула Ньютона-Лейбница (- v2 v1))) ==> integr-poly (integr-poly '((1 2) (-1 1) (3 0)) 1 10) ==> 621/2 (integr-poly '((1 2)) 0 2) ==> 8/3
Объяснение кода листинга программы
В этом коде реализована функция integr-poly, которая вычисляет определенный интеграл от полинома с помощью формулы Ньютона-Лейбница.
- В первой строке определяется функция
integr-poly, которая принимает два аргумента: полиномpolynomи интервал[a, b]для вычисления интеграла. - Затем используется
let*для определения нескольких переменных:pervoobr- переменная, которая хранит массив первообразных функций для каждого члена полинома.v1- переменная, которая хранит значение первообразной на нижнем пределеa.v2- переменная, которая хранит значение первообразной на верхнем пределеb.
- В строке
#'(lambda (x) ...)определяется анонимная функция, которая используется вmapcarдля вычисления первообразных функций для каждого члена полинома. Эта функция принимает два аргумента:xиy, гдеxявляется корнем полинома, аy- его коэффициентом. Функция возвращает массив с двумя значениями:qиn, гдеq- это значение первообразной наx, аn- индекс члена полинома. - В строке
mapcar #'(lambda (x) ...)вычисляются первообразные функции для каждого члена полинома и сохраняются в массивеpervoobr. - Затем вычисляются значения
v1иv2, используяapply '+для сложения массивов первообразных функций на нижнем и верхнем пределах соответственно. - Наконец, формула Ньютона-Лейбница используется для вычисления интеграла, вычитая
v1изv2. В приведенном примере функцияintegr-polyвызывается с полиномом((1 2) (-1 1) (3 0))и интервалом[1, 10]. Она возвращает значение621/2, что является результатом вычисления определенного интеграла.