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