Курсовая работа: Численное интегрирование функции методом Гаусса
(setq m (/ (+ b a) 2))
(setq n (/ ( - b a) 2))
(setq s1 (* g10c1 (+ (funcall f (+ m (* n g10x1))) (funcall f ( - m (* n g10x1))))))
(setq s2 (* g10c2 (+ (funcall f (+ m (* n g10x2))) (funcall f ( - m (* n g10x2))))))
(setq s3 (* g10c3 (+ (funcall f (+ m (* n g10x3))) (funcall f ( - m (* n g10x3))))))
(setq s4 (* g10c4 (+ (funcall f (+ m (* n g10x4))) (funcall f ( - m (* n g10x4))))))
(setq s5 (* g10c5 (+ (funcall f (+ m (* n g10x5))) (funcall f ( - m (* n g10x5))))))
(setq s (+ s1 s2 s3 s4 s5))
(* s ( - b a))
)
;; рекурсивная ф-ция подсчета с заданной точностью
;; gc - ранее посчитаный интеграл на интервале (a,b)
( defun Gauss (a b eps gc f)
;; разбиваем интервал на две половины
( setq k (/ (+ a b) 2))
;; в каждой половине считаем интеграл
( setq ga (Gauss_Calc a (/ (+ a b) 2) f))
(setq gb (Gauss_Calc (/ (+ a b) 2) b f))
(if (> (abs ( - (+ ga gb) gc)) eps)
(progn
(setq ga (Gauss a (/ (+ a b) 2) (/ eps 2) (Gauss_Calc a (/ (+ a b) 2) f) f))
(+ ga (Gauss (/ (+ a b) 2) b (/ eps 2) (Gauss_Calc (/ (+ a b) 2) b f) f))
)
(+ ga gb)
)
)
;; открываем файл для чтения
( setq input-stream (open " d: \\predel. txt": direction: input))
(setq a (read input-stream))