Вычисление определенного интеграла методом прямоугольника - Lisp

Узнай цену своей работы

Формулировка задачи:

Common lisp Сформировать в виде файла запись функции, начального и конечного значения, найти численным способом определенный интеграл методом прямоугольников и ответ записать в файл.
помогите пожалуйста с реализацией примерно представляю но как реализовать не понимаю
Листинг программы
  1. (defun fx(x)
  2. (setq fun #'((lambda (x) (/ (log x) (^ (+ x 2) 2))) 1 5 100))
  3. )
  4.  
  5. (defun ()
  6. (setq op1(open "C:/lisp/v1.txt"))
  7. (setq a op1)
  8. (setq op2(open "C:/lisp/v2.txt"))
  9. (setq b op2)
  10. (setq h (/(-b a)n))
  11. (setq xb a)
  12. (loop for i from 1 to 10 do
  13. (setq ih (* i h))
  14. (setq x (+xb ih)
  15. (setq s + s (fun(x)) * h)
  16.  
  17. )
  18. (defun intgr (lst &optional (s 0))
  19. (cond ((null (cdr lst)) (* (car lst) s))
  20. (t (intgr (cdr lst) (+ s (car lst)))))
  21. )
  22. (defun F(intgr)
  23. (setq out(open "C:/lisp/out.txt" :direction :output))
  24. (princ intgr out)(terpri out)
  25. (close out)
  26. )

Решение задачи: «Вычисление определенного интеграла методом прямоугольника»

textual
Листинг программы
  1. (defun simpson (f a b n
  2.                 &aux
  3.                 (h (/ (- b a) n))
  4.                 (s1 (funcall f (+ a (/ h 2))))
  5.                 (s2 0))
  6.   (loop for i from 1 below n do
  7.         (let ((z (+ a (* h i))))
  8.           (incf s1 (funcall f (+ z (/ h 2))))
  9.           (incf s2 (funcall f z)))
  10.         finally (return (* (/ h 6) (+ (funcall f a)
  11.                                       (funcall f b)
  12.                                       (* s1 4)
  13.                                       (* s2 2))))))
  14.  
  15. > (simpson (lambda (x) x) 0 5 100)
  16. 25/2
  17. > (float (simpson (lambda (x) x) 0 5 100))
  18. 12.5
  19. > (simpson (lambda (x) (* x x)) 0 5 100)
  20. 125/3
  21. > (float (simpson (lambda (x) (* x x)) 0 5 100))
  22. 41.666668
  23. > (simpson (lambda (x) (/ 1 (log x))) 2 5 5)
  24. 2.589651

Объяснение кода листинга программы

Код вычисляет определенный интеграл методом Симпсона.

  1. В первой строке функции simpson определяются переменные: — h — шаг интегрирования, — s1 и s2 — переменные для хранения сумм, используемых в формуле метода Симпсона.
  2. Затем в цикле loop от 1 до n выполняются следующие действия: — z — переменная для хранения текущей точки на отрезке [a, b], — s1 и s2 — обновляются значения сумм s1 и s2 соответственно, — incf — увеличивает значение переменной на единицу.
  3. В конце функции возвращается результат вычисления интеграла по формуле метода Симпсона: — h — шаг интегрирования, — (funcall f a) — значение функции f в точке a, — (funcall f b) — значение функции f в точке b, — (s1 4) — сумма s1 умноженная на 4, — (s2 2) — сумма s2 умноженная на 2.
  4. В конце примера кода вызывается функция simpson с разными аргументами: — (simpson (lambda (x) x) 0 5 100) — интеграл от 0 до 5 функции x, — (float (simpson (lambda (x) x) 0 5 100)) — преобразование результата в число с плавающей точкой, — (simpson (lambda (x) (* x x)) 0 5 100) — интеграл от 0 до 5 функции x^2, — (float (simpson (lambda (x) (* x x)) 0 5 100)) — преобразование результата в число с плавающей точкой.
  5. Результат вычисления интеграла выводится на экран.

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


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

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

9   голосов , оценка 4.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы