ЛИСП-реализация основных способов вычисления гамма-функции
СОДЕРЖАНИЕ
Введение
1. Постановка задачи
2. Математические и алгоритмические основы решения
задачи
2.1 Понятие гамма-функции
2.2 Вычисление гамма функции
3. Функциональные модели и блок-схемы
решения задачи
4. Программная реализация решения задачи
5. Пример выполнения программы
Заключение
Список использованных
источников и литературы
ВВЕДЕНИЕ
Выделяют особый класс
функций, представимых в виде собственного либо несобственного интеграла,
который зависит не только от формальной переменной, а и от параметра.
Такие функции называются
интегралами зависящими от параметра. К их числу относится гамма функции Эйлера.
Гамма функция
представляется интегралом Эйлера второго рода:
.
Гамма-функция расширяет
понятие факториала
на поле комплексных
чисел. Обычно обозначается Γ(z).
Была введена Леонардом
Эйлером, а своим обозначением гамма-функция обязана Лежандру.
Через гамма-функции
выражается большое число определённых интегралов, бесконечных произведений и
сумм рядов.
1. Постановка задачи
Требуется реализовать
основные способы вычисления гамма-функции:
1. Гамма-функции для
целых положительных n равна
Г (n) = (n - 1)! = 1·2...
(n - 1). (1)
2. Для x>0 гамма-функция получается из ее логарифма взятием
экспоненты.
. (2)
3. Гамма-функции для ряда
точек:
(3)
Пример 1.
Вычислить гамма-функции
Г(6).
Решение:
Так как 6 – положительное
целое число, воспользуемся формулой (1):
Г(6) =(6-1)! = 5! = 120
Ответ: 120.
Пример 2.
Вычислить гамма-функции
Г(0,5).
Решение:
Воспользуемся формулой
(2):
.
.
Ответ: .
Пример 3.
Вычислить гамма-функции
Г(1,5).
Решение:
Воспользуемся формулой
(3):
y = 1.5 + 2 = 3.5.
.
Ответ: .
2. Математические и
алгоритмические основы решения задачи
2.1 Понятие гамма-функции
Гамма функцию определяет
интеграл Эйлера второго рода
G(a) = (2.1)
сходящийся при .
Рисунок 1. График
гамма-функции действительного переменного
Положим =ty, t > 0 , имеем
G(a) =
и после замены , через и
t через 1+t ,получим
Умножая это равенство и
интегрируя по t и пределах от 0 до , имеем:
или после изменения в
правой части порядка интегрирования ,получаем:
откуда
(2.2)
заменяя в (2,1) , на и
интегрируем по частям
получаем
рекурентною формулу
(2.3)
так как
Рисунок 2. График модуля
гамма-функции на комплексной плоскости
При целом имеем
(2.4)
то есть при целых
значениях аргумента гамма-функция превращается в факториал, порядок которого на
единицу меньше взятого значения аргумента. При n=1 в (2.4) имеем
2.2 Вычисление гамма
функции
Для вычисления
гамма-функции используется аппроксимация логарифма гамма-функции. Сама же гамма
вычисляется через него.
Для аппроксимации гамма-функции
на интервале x>0 используется формула (для комплексных z) такого вида:
.
Она похожа на
аппроксимацию Стирлинга, но в ней имеется корректирующая серия. Для значений
g=5 и n=6, проверено, что величина погрешности eps не превышает . Кроме того, погрешность не
превышает этой величины на всей правой половине комплексной плоскости: Re z
> 0.
Для получения
действительной гамма-функции на интервале x>0 используется рекуррентная
формула Gam(z+1)=z*Gam(z) и вышеприведенная аппроксимация Gam(z+1). Также можно
заметить, что удобнее аппроксимировать логарифм гамма-функции, чем ее саму.
Во-первых, при этом
потребуется вызов только одной математической функции – логарифма, а не двух – экспоненты
и степени (последняя все равно использует вызов логарифма), во-вторых,
гамма-функция – быстро растущая для больших x, и аппроксимация ее логарифмом
снимает вопросы переполнения.
Для аппроксимации LnGam()
– логарифма гамма-функции – получается формула:
Значения коэффициентов Ck
являются табличными данными (Таблица 1).
k
|
C
|
1
|
2.5066282746310005
|
2
|
1.0000000000190015
|
3
|
76.18009172947146
|
4
|
-86.50532032941677
|
5
|
24.01409824083091
|
6
|
-1.231739572450155
|
7
|
0.1208650973866179e-2
|
8
|
-0.5395239384953e-5
|
Таблица 1. Значения
коэффициентов Ck
Сама гамма-функция получается
из ее логарифма взятием экспоненты. .
3 Функциональные модели и
блок-схемы решения задачи
Функциональные модели и блок-схемы
решения задачи представлены на рисунке 3, 4, 5, 6.
Условные обозначения:
§ X – параметр функции;
§ RS – инкремент;
§ GN – список коэффициентов;
§ Y – вспомогательная переменная;
§ RES – результат вычисления
гамма-функции;
§ GAM – временная переменная, содержащая
вычисление гамма-функции.
Рисунок 3 –
Функциональная модель решения задачи для функции GAMMA
Рисунок 4 –
Функциональная модель решения задачи для функции GAMMA_ WHOLE
Рисунок 5 – Блок-схема решения
задачи для поиска логарифма
гамма-функции GAMMA_LN
Рисунок 6 – Блок-схема
решения задачи для поиска
логарифма гамма-функции GAMMA_POINT
4. Программная реализация
решения задачи
;СПИСОК
КОЭФФИЦИЕНТОВ
(SETQ CN
'(2.5066282746310005 1.0000000000190015 76.18009172947146 -86.50532032941677
24.01409824083091
-1.231739572450155
0.1208650973866179e-2 -0.5395239384953e-5))
;ЛОГАРИФМ
ГАММА ФУНКЦИИ
(DEFUN GAMMA_LN (X)
(SETQ SER (CADR CN))
(SETQ L (CDDR CN))
(SETQ Y X)
(DO
((J 2))
((>= J 8))
(SETQ Y (+ Y 1))
(SETQ CO (CAR L))
(SETQ SER (+ SER (/ CO Y)))
(SETQ L (CDR L))
(SETQ J (+ J 1))
)
(SETQ Y (- Y (* (+ X 0.5) (LOG Y))))
(SETQ Y (+ (* -1 Y) (LOG (* (CAR CN) (/ SER X)))))
)
;ВЫЧИСЛЕНИЕ
ГАММА-ФУНКЦИИ ЧЕРЕЗ ЕЕ ЛОГАРИФМ
;ГАММА
ДЛЯ ПОЛОЖИТЕЛЬНЫХ АРГУМЕНТОВ
(DEFUN
GAMMA (X)
(EXP
(GAMMA_LN X))
)
;ГАММА
ДЛЯ ЦЕЛЫХ ЧИСЕЛ
(DEFUN GAMMA_WHOLE (X)
(SETQ X (- X 1))
(DO
((RES 1) (RS 1))
((EQL X 0) RS)
(SETQ RS (* RES RS))
(SETQ X (- X 1))
(SETQ
RES (+ RES 1))
)
)
;ГАММА
ДЛЯ МНОЖЕСТВА ТОЧЕК
(DEFUN GAMMA_POINT (X)
(IF (> X 0)
(PROGN
(SETQ Y (+ X 2))
(SETQ GAM (* (SQRT (* 2 (/ PI Y))) (EXP (+ (* Y (LOG Y)) (- (/ (- 1 (/ 1
(* 30 Y Y))) (* 12 Y)) Y)))))
(SETQ RES (/ GAM (* X (+ X 1))))
)
;ИНАЧЕ
(PROGN
(SETQ J 0)
(SETQ Y X)
(DO
(())
((>= Y 0))
(SETQ J (+ J 1))
(SETQ Y (+ Y 1))
)
(SETQ GAM (GAMMA_POINT Y))
(DO
((I 0))
((>= I (- J 1)))
(SETQ GAM (/ GAM (+ X I)))
(SETQ I (+ I 1))
)
(SETQ RES GAM)
)
)
RES)
;ПОЛУЧАЕМ
ЭЛЕМЕНТ ФУНКЦИИ
(SETQ
FUNC 0)
(SETQ INPUT_STREAM (OPEN " D:\GAMMA.TXT" :DIRECTION :INPUT))
(SETQ FUNC (READ INPUT_STREAM))
(CLOSE
INPUT_STREAM)
;РЕЗУЛЬТАТ
ГАММА-ФУНКЦИИ
(SETQ OUTPUT_STREAM (OPEN "D:\RESULT.TXT" :DIRECTION :OUTPUT))
(PRINT 'RESULT_OF_GAMMA_FUNCTION OUTPUT_STREAM)
;ПРИМЕНЯЕМ ДЛЯ ПОЛОЖИТЕЛЬНЫХ ЧИСЕЛ
(PRINT (MAPCAR 'GAMMA FUNC) OUTPUT_STREAM)
;ПРИМЕНЯЕМ ДЛЯ ПОЛОЖИТЕЛЬНЫХ ЦЕЛЫХ ЧИСЕЛ
(PRINT (MAPCAR 'GAMMA_WHOLE FUNC) OUTPUT_STREAM)
;ПРИМЕНЯЕМ ДЛЯ ЛЮБЫХ ЧИСЕЛ
(PRINT (MAPCAR 'GAMMA_POINT FUNC) OUTPUT_STREAM)
(TERPRI OUTPUT_STREAM)
(CLOSE OUTPUT_STREAM)
;END
5 Пример выполнения
программы
Пример 1.
Рисунок 7 – Входные
данные. Вычисление гамма-функции для положительных целых чисел
Пример 2.
Рисунок 9 – Входные
данные. Вычисление гамма-функции для положительных чисел
Рисунок 10 – Выходные
данные. Вычисление гамма-функции для положительных чисел
Пример 3.
Рисунок 11 – Входные
данные. Вычисление гамма-функции для множества чисел
Рисунок 12 – Выходные данные.
Вычисление гамма-функции для множества чисел
ЗАКЛЮЧЕНИЕ
Гамма функции являются
удобным средством для вычисления некоторых интегралов в частности многих из тех
интегралов, которые не представимы в элементарных функциях. Благодаря этому они
широко применяются в математике и ее приложениях, в механике, термодинамике и в
других отраслях современной науки.
Итогом
работы можно считать созданную функциональную модель реализации основных способов
вычисления гамма функции. Данная модель
применима к гамма-функции с положительным целым параметром, гамма-функции с
положительным параметром, гамма-функции для множества точек. Созданная
функциональная модель реализации основных способов вычисления гамма
функции и ее программная реализация могут
служить органической частью решения более сложных задач.
СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ и литературы
1.
Бронштейн, И.Н. Справочник по математике для инженеров и учащихся втузов
[Текст] / И.Н.Бронштейн, К.А.Семендяев. – М.: Наука, 2007. – 708 с.
2. Вычисление гамма-функции и
бета-функции [Электронный ресурс] – Режим доступа: http://ru.wikipedia.org/wiki/Гамма_функция
4.
Кремер, Н.Ш.
Высшая математика для экономистов: учебник для студентов вузов. [Текст] /
Н.Ш.Кремер, 3-е издание – М.:ЮНИТИ-ДАНА, 2006. C. 412.
5.
Семакин, И.Г.
Основы программирования. [Текст] / И.Г.Семакин, А.П.Шестаков. – М.: Мир, 2006. C. 346.
6.
Симанков,
В.С. Основы функционального программирования [Текст] / В.С.Симанков,
Т.Т.Зангиев, И.В.Зайцев. – Краснодар: КубГТУ, 2002. – 160 с.
7.
Степанов, П.А.
Функциональное программирование на языке Lisp. [Электронный ресурс] / П.А.Степанов,
А.В. Бржезовский. – М.: ГУАП, 2003. С. 79.
8.
Хювенен Э. Мир Лиспа [Текст] / Э.Хювенен, Й.Сеппянен. – М.: Мир, 1990. –
460 с.