Численное интегрирование функции методом Гаусса
Содержание
Введение
1. Постановка задачи
2. Математические и алгоритмические основы решения задачи
2.1 Метод прямоугольников
2.2 Метод трапеций
2.3 Метод парабол (метод Симпсона)
2.4 Увеличение точности
2.5 Метод Гаусса
2.6 Метод Гаусса-Кронрода
3. Функциональные модели решения задачи
4. Программная реализация решения задачи
5. Пример выполнения программы
Заключение
Список использованных источников и литературы
Введение
Появление и непрерывное совершенствование быстродействующих электронных вычислительных машин (ЭВМ) привело к подлинно революционному преобразованию науки вообще и математики в особенности. Изменилась технология научных исследований, колоссально увеличились возможности теоретического изучения, прогноза сложных процессов, проектирования инженерных конструкций. Решение крупных научно-технических проблем, примерами которых могут служить проблемы овладения ядерной энергией и освоения космоса, стало возможным лишь благодаря применению математического моделирования и новых численных методов, предназначенных для ЭВМ.
В настоящее время можно говорить, что появился новый способ теоретического исследования сложных процессов, допускающих математическое описание, - вычислительный эксперимент, т.е. исследование естественнонаучных проблем средствами вычислительной математики. Разработка и исследование вычислительных алгоритмов, и их применение к решению конкретных задач составляет содержание огромного раздела современной математики - вычислительной математики.
Численные методы дают приближенное решение задачи. Это значит, что вместо точного решения и (функции или функционала) некоторой задачи мы находим решение у другой задачи, близкое в некотором смысле (например, по норме) к искомому. Основная идея всех методов - дискретизация или аппроксимация (замена, приближение) исходной задачи другой задачей, более удобной для решения на ЭВМ, причем решение аппроксимирующей задачи зависит от некоторых параметров, управляя которыми, можно определить решение с требуемой точностью. Например, в задаче численного интегрирования такими параметрами являются узлы и веса квадратурной формулы. Далее, решение дискретной задачи является элементом конечномерного пространства.
Численное интегрирование (историческое название: квадратура) - вычисление значения определённого интеграла (как правило, приближённое), основанное на том, что величина интеграла численно равна площади криволинейной трапеции, ограниченной осью абсцисс, графиком интегрируемой функции и отрезками прямых, которые являются пределами интегрирования.
Необходимость применения численного интегрирования чаще всего может быть вызвана отсутствием у первообразной функции представления в элементарных функциях и, следовательно, невозможностью аналитического вычисления значения определённого интеграла по формуле Ньютона-Лейбница. Также возможна ситуация, когда вид первообразной настолько сложен, что быстрее вычислить значение интеграла численным методом.
1. Постановка задачи
Сущность большинства методов вычисления определенных интегралов состоит в замене подынтегральной функции аппроксимирующей функцией, для которой можно легко записать первообразную в элементарных функциях.
Аппроксимация, или приближение - математический метод, состоящий в замене одних математических объектов другими, в том или ином смысле близкими к исходным, но более простыми. Аппроксимация позволяет исследовать числовые характеристики и качественные свойства объекта, сводя задачу к изучению более простых или более удобных объектов (например, таких, характеристики которых легко вычисляются или свойства которых уже известны). В теории чисел изучаются диофантовы приближения, в частности приближения иррациональных чисел рациональными. В геометрии рассматриваются аппроксимации кривых ломаными. Некоторые разделы математики целиком посвящены аппроксимации, например, теория приближения функций, численные методы анализа.
Также в задачах такого рода активно используются интерполяционные методы нахождения значений функции.
Интерполяция - в вычислительной математике способ нахождения промежуточных значений величины по имеющемуся дискретному набору известных значений.
Многим из тех, кто сталкивается с научными и инженерными расчётами часто приходится оперировать наборами значений, полученных экспериментальным путём или методом случайной выборки. Как правило, на основании этих наборов требуется построить функцию, на которую могли бы с высокой точностью попадать другие получаемые значения. Такая задача называется аппроксимацией кривой. Интерполяцией называют такую разновидность аппроксимации, при которой кривая построенной функции проходит точно через имеющиеся точки данных.
Существует также близкая к интерполяции задача, которая заключается в аппроксимации какой-либо сложной функции другой, более простой функцией. Если некоторая функция слишком сложна для производительных вычислений, можно попытаться вычислить её значение в нескольких точках, а по ним построить, то есть интерполировать, более простую функцию. Разумеется, использование упрощенной функции не позволяет получить такие же точные результаты, какие давала бы первоначальная функция. Но в некоторых классах задач достигнутый выигрыш в простоте и скорости вычислений может перевесить получаемую погрешность в результатах.
На практике чаще всего применяют интерполяцию полиномами. Это связано прежде всего с тем, что полиномы легко вычислять, легко аналитически находить их производные и множество полиномов плотно в пространстве непрерывных функций.
Для решения нашей задачи необходимо предусмотреть ввод необходимых данных и реализацию контрольно примера.
Также необходимо реализовать подпрограммы в виде функций. Главная функция будет выполнять основные действия (подсчет значения интеграла и вывод в файл результата), вызывая другие подпрограммы.
Главная функция будет вызывать функцию подсчета интеграла с заданной точностью вычислений, которая в свою очередь на каждом шаге будет вызывать функцию подсчета значения функции.
Пример 1.
Вычислим интеграл методом Гаусса.
Решение.
.
.
.
Ответ: 3.584.
Пример 2.
Вычислим интеграл методом Гаусса.
Решение.
.
.
.
Ответ: - 0.588.
2. Математические и алгоритмические основы решения задачи
Кратко рассмотрим основные методы численного интегрирования и выясним, почему самый лучший и быстрый метод интегрирования - десятиточечный метод Гаусса.
2.1 Метод прямоугольников
Метод прямоугольников получается при замене подынтегральной функции на константу. В качестве константы можно взять значение функции в любой точке отрезка . Наиболее часто используются значения функции в середине отрезка и на его концах. Соответствующие модификации носят названия методов средних прямоугольников, левых прямоугольников и правых прямоугольников. Формула для приближенного вычисления значения определённого интеграла методом прямоугольников имеет вид
,
где , или , соответственно.
2.2 Метод трапеций
Если функцию на каждом из частичных отрезков аппроксимировать прямой, проходящей через конечные значения, то получим метод трапеций.
Площадь трапеции на каждом отрезке:
.
Погрешность аппроксимации на каждом отрезке:
,
где
.
Полная формула трапеций в случае деления всего промежутка интегрирования на отрезки одинаковой длины h:
, где
Погрешность формулы трапеций:
, где
2.3 Метод парабол (метод Симпсона)
Использовав три точки отрезка интегрирования можно заменить подынтегральную функцию параболой. Обычно в качестве таких точек используют концы отрезка и его среднюю точку. В этом случае формула имеет очень простой вид
.
Если разбить интервал интегрирования на 2N равных частей, то имеем
,
где .
2.4 Увеличение точности
Приближение функции одним полиномом на всем отрезке интегрирования, как правило, приводит к большой ошибке в оценке значения интеграла.
Для уменьшения погрешности отрезок интегрирования разбивают на части и применяют численный метод для оценки интеграла на каждой из них.
При стремлении количества разбиений к бесконечности, оценка интеграла стремится к его истинному значению для любого численного метода.
Приведённые выше методы допускают простую процедуру уменьшения шага в два раза, при этом на каждом шаге требуется вычислять значения функции только во вновь добавленных узлах. Для оценки погрешности вычислений используется правило Рунге.
2.5 Метод Гаусса
Описанные выше методы используют фиксированные точки отрезка (концы и середину) и имеют низкий порядок точности (0 - методы правых и левых прямоугольников, 1 - методы средних прямоугольников и трапеций, 3 - метод парабол (Симпсона)). Если мы можем выбирать точки, в которых мы вычисляем значения функции , то можно при том же количестве вычислений подынтегральной функции получить методы более высокого порядка точности. Так для двух (как в методе трапеций) вычислений значений подынтегральной функции, можно получить метод уже не 1-го, а 3-го порядка точности:
.
В общем случае, используя точек, можно получить метод с порядком точности . Значения узлов метода Гаусса по точкам являются корнями полинома Лежандра степени .
Значения узлов метода Гаусса и их весов приводятся в справочниках специальных функций. Наиболее известен метод Гаусса по пяти точкам.
2.6 Метод Гаусса-Кронрода
Недостаток метода Гаусса состоит в том, что он не имеет лёгкого (с вычислительной точки зрения) пути оценки погрешности полученного значения интеграла. Использование правила Рунге требует вычисления подынтегральной функции примерно в таком же числе точек, не давая при этом практически никакого выигрыша точности, в отличие от простых методов, где точность увеличивается в разы при каждом новом разбиении. Кронродом был предложен следующий метод оценки значения интеграла
,
где - узлы метода Гаусса по точкам, а параметров , , подобраны таким образом, чтобы порядок точности метода был равен .
Тогда для оценки погрешности можно использовать эмпирическую формулу:
,
где - приближённое значение интеграла, полученное методом Гаусса по точкам.
3. Функциональные модели решения задачи
Функциональные модели решения задачи представлены на рисунках 1 и 2.
Используемые обозначения:
g10c1, g10c2, g10c3, g10c4, g10c5 - константы десятиточечного метода Гаусса;
g10x1, g10x2, g10x3, g10x4, g10x5 - константы десятиточечного метода Гаусса;
m, n - вспомогательные переменные;
s1, s2, s3, s4, s5, s - вспомогательные переменные;
a, b - пределы интегрирования;
f - интегрируемая функция;
gc - посчитанный интеграл на интервале (a, b);
ga, gb - переменные для подсчета интеграла на половине интервала;
eps - точность интегрирования;
k - вспомогательная переменная.
Рисунок 1 - Функциональная модель решения задачи десятиточечного метода Гаусса, реализованная методом Gaus_Calc
Рисунок 2 - Функциональная модель решения задачи для функции Gaus
4. Программная реализация решения задачи
;интегрируемая функция
(defun F (x)
;; 1 пример
;(/ (* 2 (expt x 3)) (expt x 4))
;; 2 пример
;(* 3.142 (sin (* 3.142 x)))
;; 3 пример
(* (/ (log (+ x 1)) x) (exp (* - 1 x)))
)
;десятиточечный метод Гаусса
(defun Gauss_Calc (a b f)
(setq g10c1 (/ 0.9739065285 6.2012983932))
(setq g10c2 (/ 0.8650633667 6.2012983932))
(setq g10c3 (/ 0.6794095683 6.2012983932))
(setq g10c4 (/ 0.4333953941 6.2012983932))
(setq g10c5 (/ 0.1488743390 6.2012983932))
(setq g10x1 (/ 0.0666713443 6.2012983932))
(setq g10x2 (/ 0.1494513492 6.2012983932))
(setq g10x3 (/ 0.2190863625 6.2012983932))
(setq g10x4 (/ 0.2692667193 6.2012983932))
(setq g10x5 (/ 0.2955242247 6.2012983932))
(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))
(setq b (read input-stream))
(setq eps (read input-stream))
(close input-stream)
;находим интеграл
(setq integral (Gauss a b eps (Gauss_Calc a b (function F)) (function F)))
;открываем файл для записи
(setq output-stream (open " d: \\test. txt": direction: output))
(format output-stream "Integral = ~a" integral)
(close output-stream)
5. Пример выполнения программы
Пример 1.
Рисунок 3 - Пределы интеграла и точность вычисления для интегрируемой функции
Рисунок 4 - Результат вычисления интеграла функции с заданными пределами и точностью вычисления
Пример 2.
Рисунок 5 - Пределы интеграла и точность вычисления для интегрируемой функции
Рисунок 6 - Результат вычисления интеграла функции с заданными пределами и точностью вычисления
Пример 3.
Рисунок 7 - Пределы интеграла и точность вычисления для интегрируемой функции
Рисунок 8 - Результат вычисления интеграла функции с заданными пределами и точностью вычисления
Заключение
Проблема повышения качества вычислений, как несоответствие между желаемым и действительным, существует и будет существовать в дальнейшем. Ее решению будет содействовать развитие информационных технологий, которое заключается как в совершенствовании методов организации информационных процессов, так и их реализации с помощью конкретных инструментов - сред и языков программирования.
Итогом работы можно считать созданную функциональную модель вычисления интеграла функции методом Гаусса. Созданная функциональная модель и ее программная реализация могут служить органической частью решения более сложных задач.
Список использованных источников и литературы
1.Бронштейн И.Н. Справочник по математике для инженеров и учащихся втузов [Текст] / И.Н. Бронштейн, К.А. Семендяев. - М.: Наука, 2007. - 708 с.
2.Кремер Н.Ш. Высшая математика для экономистов: учебник для студентов вузов. [Текст] / Н.Ш. Кремер, 3-е издание - М.: ЮНИТИ-ДАНА, 2006. C.412.
3.Калиткин Н.Н. Численные методы. [Электронный ресурс] / Н.Н. Калиткин. - М.: Питер, 2001. С.504.
4.Численное интегрирование [Электронный ресурс] - Режим доступа: http://ru. wikipedia.org/wiki/Численное_интегрирование
5.Семакин И.Г. Основы программирования. [Текст] / И.Г. Семакин, А.П. Шестаков. - М.: Мир, 2006. C.346.
6.Симанков В.С. Основы функционального программирования [Текст] / В.С. Симанков, Т.Т. Зангиев, И.В. Зайцев. - Краснодар: КубГТУ, 2002. - 160 с.
7.Степанов П.А. Функциональное программирование на языке Lisp. [Электронный ресурс] / П.А. Степанов, А.В. Бржезовский. - М.: ГУАП, 2003. С.79.
8.Хювенен Э. Мир Лиспа [Текст] / Э. Хювенен, Й. Сеппянен. - М.: Мир, 1990. - 460 с.
Нравится материал? Поддержи автора!
Ещё документы из категории информатика:
Чтобы скачать документ, порекомендуйте, пожалуйста, его своим друзьям в любой соц. сети.
После чего кнопка «СКАЧАТЬ» станет доступной!
Кнопочки находятся чуть ниже. Спасибо!
Кнопки:
Скачать документ