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

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

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

Common lisp Сформировать в виде файла запись функции, начального и конечного значения, найти численным способом определенный интеграл методом прямоугольников и ответ записать в файл.
помогите пожалуйста с реализацией примерно представляю но как реализовать не понимаю
(defun fx(x)
(setq fun #'((lambda (x) (/ (log x) (^ (+ x 2) 2))) 1 5 100))
)

(defun ()
    (setq op1(open "C:/lisp/v1.txt"))
    (setq a op1)
    (setq op2(open "C:/lisp/v2.txt"))
    (setq b op2)
    (setq h (/(-b a)n))
    (setq xb a)
    
    (loop for i from 1 to 10 do
    (setq ih  (* i h))
    (setq x (+xb ih)
    (setq s + s (fun(x)) * h)

)
 
(defun intgr (lst &optional (s 0))
(cond ((null (cdr lst)) (* (car lst) s))
        (t (intgr (cdr lst) (+ s (car lst)))))
 
)
 
(defun F(intgr)
(setq out(open "C:/lisp/out.txt" :direction :output))
(princ intgr out)(terpri out)
(close out)
)

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

textual
Листинг программы
(defun simpson (f a b n
                &aux
                (h (/ (- b a) n)) 
                (s1 (funcall f (+ a (/ h 2))))
                (s2 0))
  (loop for i from 1 below n do
        (let ((z (+ a (* h i))))
          (incf s1 (funcall f (+ z (/ h 2))))
          (incf s2 (funcall f z)))
        finally (return (* (/ h 6) (+ (funcall f a)
                                      (funcall f b)
                                      (* s1 4)
                                      (* s2 2))))))
 
> (simpson (lambda (x) x) 0 5 100)
25/2
> (float (simpson (lambda (x) x) 0 5 100))
12.5
> (simpson (lambda (x) (* x x)) 0 5 100)
125/3
> (float (simpson (lambda (x) (* x x)) 0 5 100))
41.666668
> (simpson (lambda (x) (/ 1 (log x))) 2 5 5)
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
Похожие ответы