Вычисление определенного интеграла - 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
, что является результатом вычисления определенного интеграла.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д