|
||||||||||||
|
||||||||||||
|
|||||||||
МЕНЮ
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА - РЕФЕРАТЫ - ЛИСП-реализация основных способов вычисления гамма-функцииЛИСП-реализация основных способов вычисления гамма-функцииСОДЕРЖАНИЕ Введение 1. Постановка задачи
ВВЕДЕНИЕ Выделяют особый класс функций, представимых в виде собственного либо несобственного интеграла, который зависит не только от формальной переменной, а и от параметра. Такие функции называются интегралами зависящими от параметра. К их числу относится гамма функции Эйлера. Гамма функция представляется интегралом Эйлера второго рода: . Гамма-функция расширяет понятие факториала на поле комплексных чисел. Обычно обозначается ?(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 Понятие гамма-функции Гамма функцию определяет интеграл Эйлера второго рода (a) = (2.1) сходящийся при . Рисунок 1. График гамма-функции действительного переменного Положим =ty, t > 0 , имеем (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).
Таблица 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 (+ X 5.5)) (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 - Входные данные. Вычисление гамма-функции для положительных целых чисел Рисунок 8 - Выходные данные. Вычисление гамма-функции для положительных целых чисел Пример 2. Рисунок 9 - Входные данные. Вычисление гамма-функции для положительных чисел Рисунок 10 - Выходные данные. Вычисление гамма-функции для положительных чисел Пример 3. Рисунок 11 - Входные данные. Вычисление гамма-функции для множества чисел Рисунок 12 - Выходные данные. Вычисление гамма-функции для множества чисел ЗАКЛЮЧЕНИЕ Гамма функции являются удобным средством для вычисления некоторых интегралов в частности многих из тех интегралов, которые не представимы в элементарных функциях. Благодаря этому они широко применяются в математике и ее приложениях, в механике, термодинамике и в других отраслях современной науки. Итогом работы можно считать созданную функциональную модель реализации основных способов вычисления гамма функции. Данная модель применима к гамма-функции с положительным целым параметром, гамма-функции с положительным параметром, гамма-функции для множества точек. Созданная функциональная модель реализации основных способов вычисления гамма функции и ее программная реализация могут служить органической частью решения более сложных задач. СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ и литературы Бронштейн, И.Н. Справочник по математике для инженеров и учащихся втузов [Текст] / И.Н.Бронштейн, К.А.Семендяев. - М.: Наука, 2007. - 708 с. Вычисление гамма-функции и бета-функции [Электронный ресурс] - Режим доступа: http://www.cyberguru.ru/cpp-sources/algorithms/vytchislenie-gamma-funktsii-i-beta-funktsii.html Гамма-функция - Википедия [Электронный ресурс] - Режим доступа: http://ru.wikipedia.org/wiki/Гамма_функция Кремер, Н.Ш. Высшая математика для экономистов: учебник для студентов вузов. [Текст] / Н.Ш.Кремер, 3-е издание - М.:ЮНИТИ-ДАНА, 2006. C. 412. Семакин, И.Г. Основы программирования. [Текст] / И.Г.Семакин, А.П.Шестаков. - М.: Мир, 2006. C. 346. Симанков, В.С. Основы функционального программирования [Текст] / В.С.Симанков, Т.Т.Зангиев, И.В.Зайцев. - Краснодар: КубГТУ, 2002. - 160 с. Степанов, П.А. Функциональное программирование на языке Lisp. [Электронный ресурс] / П.А.Степанов, А.В. Бржезовский. - М.: ГУАП, 2003. С. 79. Хювенен Э. Мир Лиспа [Текст] / Э.Хювенен, Й.Сеппянен. - М.: Мир, 1990. - 460 с. |
РЕКЛАМА
|
|||||||||||||||||||||||||||||||||||||||||||||
|
БОЛЬШАЯ ЛЕНИНГРАДСКАЯ БИБЛИОТЕКА | ||
© 2010 |