Вычисление определенного интеграла методом прямоугольника - 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
Объяснение кода листинга программы
Код вычисляет определенный интеграл методом Симпсона.
- В первой строке функции
simpson
определяются переменные: —h
— шаг интегрирования, —s1
иs2
— переменные для хранения сумм, используемых в формуле метода Симпсона. - Затем в цикле
loop
от 1 доn
выполняются следующие действия: —z
— переменная для хранения текущей точки на отрезке [a, b], —s1
иs2
— обновляются значения суммs1
иs2
соответственно, —incf
— увеличивает значение переменной на единицу. - В конце функции возвращается результат вычисления интеграла по формуле метода Симпсона:
—
h
— шаг интегрирования, —(funcall f a)
— значение функцииf
в точкеa
, —(funcall f b)
— значение функцииf
в точкеb
, —(s1 4)
— суммаs1
умноженная на 4, —(s2 2)
— суммаs2
умноженная на 2. - В конце примера кода вызывается функция
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))
— преобразование результата в число с плавающей точкой. - Результат вычисления интеграла выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д