Вычисление определенного интеграла - 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, которая вычисляет определенный интеграл от полинома с помощью формулы Ньютона-Лейбница.

  1. В первой строке определяется функция integr-poly, которая принимает два аргумента: полином polynom и интервал [a, b] для вычисления интеграла.
  2. Затем используется let* для определения нескольких переменных:
    • pervoobr - переменная, которая хранит массив первообразных функций для каждого члена полинома.
    • v1 - переменная, которая хранит значение первообразной на нижнем пределе a.
    • v2 - переменная, которая хранит значение первообразной на верхнем пределе b.
  3. В строке #'(lambda (x) ...) определяется анонимная функция, которая используется в mapcar для вычисления первообразных функций для каждого члена полинома. Эта функция принимает два аргумента: x и y, где x является корнем полинома, а y - его коэффициентом. Функция возвращает массив с двумя значениями: q и n, где q - это значение первообразной на x, а n - индекс члена полинома.
  4. В строке mapcar #'(lambda (x) ...) вычисляются первообразные функции для каждого члена полинома и сохраняются в массиве pervoobr.
  5. Затем вычисляются значения v1 и v2, используя apply '+ для сложения массивов первообразных функций на нижнем и верхнем пределах соответственно.
  6. Наконец, формула Ньютона-Лейбница используется для вычисления интеграла, вычитая v1 из v2. В приведенном примере функция integr-poly вызывается с полиномом ((1 2) (-1 1) (3 0)) и интервалом [1, 10]. Она возвращает значение 621/2, что является результатом вычисления определенного интеграла.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы