Разработка программы, вычисляющей интеграл
Государственное
образовательное учреждение высшего
профессионального образования
Кубанский
государственный
(КубГТУ)
Кафедра ______________________
(наименование кафедры)
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту (работе)
по
______________________________
на
тему ______________________________
(тема курсового проекта (работы))
Выполнил
(а) студент (ка) группы ______________________________
______________________________
(ф.и.о.)
Допущен
к защите______________________
Руководитель
проекта_______________________
Нормоконтролер
______________________________
Защищен _____________________ Оценка _______________________
(дата)
Члены комиссии
______________________________
(подпись, дата, расшифровка
подписи)
Краснодар
2010
Государственное
образовательное учреждение высшего
профессионального образования
Кубанский
государственный
(КубГТУ)
Кафедра ______________________
(наименование кафедры)
Зав. кафедрой ___________________
З А Д А Н И Е
на курсовое проектирование
Студенту:_____________________
(Ф.И.О.)
факультета ___________________
специальности
______________________________
______________________________
Тема проекта:______________________
Содержание задания:___________
______________________________
Объем работы:
а) пояснительная записка к проекту _____________ с.
б) программы.
Рекомендуемая
литература:___________________
Срок выполнения проекта: с "___" ______по"___"____20__г.
Срок защиты:
Дата выдачи задания: "___"____20__г.
Дата сдачи проекта на кафедру: "___"____20__г.
Руководитель
проекта ______________________________
Задание принял
студент ______________________________
(подпись, дата)
Государственное
образовательное учреждение высшего
профессионального образования
Кубанский
государственный
(КубГТУ)
Реферат
Пояснительная
записка курсового проекта (работы)
33 с., 16 рис., 4 источника.
ОПРЕДЕЛЕННЫЙ
ИНТЕГРАЛ, МЕТОД ПРЯМОУГОЛЬНИКОВ, МЕТОД
КРИВОЛИНЕЙНЫХ ТРАПЕЦИЙ, МЕТОД СИМПСОНА
(ПАРАБОЛ), ПОСТРОЕНИЕ ГРАФИКА.
Объектом
исследования является численное интегрирование
с применением языка C# и применение
принципов объектно-ориентированного
программирования.
Цель
работы состоит в разработке программы
на языке C# демонстрирующей интегрирование
различными методами и получении результатов.
К
полученным результатам относятся построенный
график функции с отображенными пределами
интегрирования, численные значения интеграла,
вычисленного разными способами, определенные
погрешности вычислений.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
Нормативные ссылки
Список используемой
литературы
ВВЕДЕНИЕ
Цель
курсовой работы является приобретение
и углубление знаний в области
высокоуровневых методов информатики
и программирования, получения дополнительных
практических навыков в использовании
основных приёмов обработки экспериментальных
данных, численного решения определенных
интегралов.
Численное интегральное исчисление – часто используемая тема в математике. При решении ряда актуальных физических и технических задач встречаются определенные интегралы от функций, первообразные которых не выражаются через элементарные функции. Кроме того, в приложениях приходится иметь дело с определенными интегралами, сами подынтегральные функции которых не являются элементарными. Это приводит к необходимости использования приближенных методов вычисления определенных интегралов.
- Спецификации задачи
Разрабатываемая
программа должна обладать следующими
качествами:
- Производить интегрирование заданной функции методом прямоугольников, трапеций, парабол на основе входных данных и выводить результат;
- Иметь графический интерфейс, позволяющий вводить исходные данные, а также визуализировать результаты вычислений, выводя на экран график подынтегральной функции, значения вычисленных интегралов и погрешности их вычислений.
- При написании исходных текстов программы необходимым условием является использование основных принципов объектно-ориентированного программирования, обработки исключительных ситуаций, потоков выполнения, наличие подключаемых библиотек.
- Формулировка задачи
Данная курсовая работа посвящена разработке программы на языке C#, которая вычисляет определенный интеграл от функции, имеющей первообразную, которую можно вычислить с помощью той или иной приближенной формулы. Для решения этой задачи применяются методы прямоугольников, трапеций и парабол (Симпсона).
Задача курсового проекта – разработать программу на языке C#, такую, чтобы при работе с этой программой пользователь имел возможность:
a) Найти определенный интеграл выше упомянутыми методами от следующей функции:
б) ввести с клавиатуры пределы интегрирования и количество интервалов разбиения (a, b и n);
в) увидеть результаты вычислений на экране в удобном для восприятия виде с отображением графика функции, на введенном с клавиатуры отрезке.
При помощи данной программы нетрудно будет сравнить результаты вычислений одного и того же определенного интеграла найденные разными методами.
Программа должна отвечать следующим требованиям:
a) иметь простой интерфейс;
б) иметь защиту от некорректно введенных данных.
Актуальность
реализации программы на компьютере
заключается в простом
- Описание методов вычислительной математики, используемых при решении
- Численное интегрирование
Определенный интеграл
| (1) |
с пределами интегрирования a и b можно трактовать как площадь фигуры, ограниченной ординатами a и b, осью абсцисс x и графиком подынтегральной функции . Обыкновенный определенный интеграл, у которого известна его первообразная , вычисляется по формуле Ньютона-Лейбница . Поэтому для вычисления простых определенных интегралов достаточно вычислить значение .
На практике часто встречаются интегралы, которые не выражаются через элементарные функции или выражаются очень сложно. Нередко подынтегральная функция задается таблицей или графиком. В этих случаях интегралы находятся приближенными методами, которые заключаются в интерполяции на отрезке подходящим полиномом, для которого интеграл вычисляется по формулам численного интегрирования. Обычно отрезок разбивается на частей, к каждой из которых применяется соответствующая простая формула. Таким образом, получают составные (или сложные) формулы численного интегрирования. Для данной курсовой работы предусмотрено рассмотреть три способа численного интегрирования с помощью метода прямоугольников, криволинейных трапеций и метода Симпсона (параболических трапеций).
- Метод прямоугольников
Промежуток интегрирования делится точками на n равных частей; длина каждой
.
Для
единообразия полагаем
,
. Через
обозначаем середины участков
Полагаем
Формулой прямоугольников называются следующие приближенные равенства:
|
– формула левых |
(2) |
|
– формула правых |
(3) |
|
– формула средних |
(4) |
Выражения (2), (3), (4) дают площади ступенчатых фигур, изображенных на рисунках 1, 2, 3 соответственно. В большинстве случаев при данном n формула (4) точнее, чем (2) и (3). С увеличением n точность формул (2), (3), (4) неограниченно возрастает.
Предельная погрешность формулы (4) составляет: ,
где
– наибольшее значение
в промежутке
.
Рисунок 1 – Ступенчатая фигура, полученная по методу левых прямоугольников
Рисунок
2 – Ступенчатая фигура, полученная
по методу правых прямоугольников
Рисунок
3 – Ступенчатая фигура, полученная
по методу средних прямоугольников
Формула (4) наиболее точная, и погрешность по сравнению с формулами (2) и (3) уменьшается в приблизительно 50 раз. Отметим, что для линейной функции формула (4) дает точный ответ, поскольку в этом случае .
- Математический вывод формулы метода прямоугольников
Пусть на отрезке задана непрерывная функция . Требуется вычислить интеграл , численно равный площади соответствующей криволинейной трапеции.
Рисунок
4 – Ступенчатая фигура, состоящая из
элементарных прямоугольников
Разобьем основание этой трапеции, т.е. отрезок , на n равных частей (отрезков) длины (что равняется шагу разбиения) с помощью точек . Можно записать, что , где .
В середине каждого такого отрезка поставим ординату графика функции . Приняв эту ординату за высоту, построим прямоугольник с площадью .
Тогда сумма площадей всех n прямоугольников дает площадь ступенчатой фигуры, представляющую собой приближенное значение искомого определенного интеграла
| . | (5) |
Рисунок 5 – Блок-схема к алгоритму решения определенных интегралов по методу прямоугольников
- Метод криволинейных трапеций
Формула трапеций выводится аналогично формуле прямоугольников: на каждом частичном отрезке криволинейная трапеция заменяется обычной.
Рисунок 6 – Криволинейная фигура, полученная по методу криволинейных трапеций
Разобьем промежуток на n равных частей длины . Абсциссы точек деления . Пусть соответствующие им ординаты графика функции. Тогда расчетные формулы для этих значений примут вид: , , где .
Заменим кривую ломаной линией, звенья которой соединяют концы ординат и , где . Тогда площадь криволинейной трапеции приближенно равна сумме площадей обычных трапеций с основаниями , и высотой :
|
или |
(6) |
| – формула трапеций. | (7) |
Абсолютная погрешность приближения, полученного по формуле трапеций (7), оценивается с помощью формулы , где – наибольшее значение в промежутке . Так же, как и формула (4), формула трапеций (7) дает точный результат для линейной функции , поскольку .
- Метод Симпсона (парабол)
Если заменить график функции на каждом отрезке разбиения не отрезками прямых, как в методах прямоугольников и трапеций, а дугами парабол, то получим более точную формулу приближенного вычисления определенного интеграла .
Предварительно найдем площадь S криволинейной трапеции, ограниченной сверху графиком параболы , сбоку – прямыми , и снизу – отрезком (см. рисунок 7).
Рисунок
7 – Криволинейная фигура, ограниченная
по сторонам прямыми
и
, а сверху графиком параболы
Пусть парабола проходит через три точки , , , где – ордината параболы в точке ; – ордината параболы в точке ; – ордината параболы в точке .
Площадь криволинейной фигуры, показанной на рисунке 7 равна
| (8) |
Выразим эту площадь через . Из равенств для ординат находим, что , .
Подставляя
эти значения c
и a в равенство (8), получаем
| . | (9) |
Получим теперь формулу парабол для вычисления интеграла .
Для этого отрезок разобьем на 2n равных частей (отрезков) длиной точками , где . В точках деления вычисляем значения подынтегральной функции , где (рисунок 8).
Рисунок 8 – Криволинейная фигура, полученная по методу Симпсона (парабол)
Заменяем каждую пару соседних элементарных криволинейных трапеций с основаниями, равным h, одной элементарной параболической трапецией с основанием, равным 2h. На отрезке парабола проходит через три точки , , . Используя формулу (9), находим .
Аналогично находим
,
.
Сложив
полученные равенства, имеем
или
| (10) |
Формула (10) называется формулой Симпсона (парабол). Абсолютная погрешность вычисления по формуле (10) оценивается соотношением
, где .
Отметим,
что формула (9) дает точное значение
интеграла
во всех случаях, когда
– многочлен, степень которого меньше
или равна трем (тогда
).
Рисунок 9 – Блок-схема к алгоритму решения определенных интегралов по методу Симпсона (парабол)
- Описание методов программирования, примененных в работе
- Среда разработки и организация решения
Курсовая работа выполнена в интегрированной среде программирования MS Visual Studio 2008.
Решение состоит из 2-х проектов:
- IntegralClassLibrary;
- Курсовая работа по ООП.
- Проект библиотеки классов «IntegralClassLibrary»
Проект включает в себя файл «Integrals.cs», в котором определены классы, содержащие методы для осуществления вычислений и свойства для получения результатов расчетов и погрешностей. Этот проект представляет собой библиотеку классов, после компиляции, которой образуется файл «IntegralClassLibrary.dll». Данный файл должен находиться в одной папке с запускаемым файлом программы.
В рамках библиотеки разработана иерархия классов с наследованием.
Базовым классом определен абстрактный класс Integral, в котором объявлены и реализованы все поля, свойства и методы общие для всех классов-наследников.
Рисунок
10 – Схема класса Integral
Accuracy – Свойство
для получения погрешности интегрирования;
Square – Свойство
для получения вычисленного значения
интеграла;
Exact_value( ) – статический
метод вычисления точного значения интеграла
на основе аналитической формулы;
F( ) – статический метод для вычисления значения функции;
Integral(double a, double b, int n)
– конструктор класса, в котором инициализируются
поля и вызывается метод Solve( );
Solve( ) – абстрактный
метод определяющий общий интерфейс для
всех потомков класса, определяется в
наследниках содержит алгоритм вычисления
уникальный для каждого метода вычисляющего
интеграл;
ToString( ) – возвращает
текстовую строку, с результатами.
Базовый класс Integral порождает наследников, в которых реализуется абстрактный метод Solve( ), и передаются параметры вычислений конструктору базового класса.
Рисунок
11 – Схема реализации наследования от
класса Integral
Каждый класс-наследник содержит конструктор, совпадающий с именем своего класса, а также реализует уже описанный метод Solve( ).
Таким образом, весь код логически общий для всех классов-наследников помещен в базовый класс Integral при помощи механизма наследования.
Реализация вычислений скрыта от пользователей классов Trapezoids, Rectangles, Simpsons, благодаря механизму инкапсуляции.
Полиморфизм проявляется при вызове метода Solve( ) имеющего разные реализации в каждом классе-наследнике. Данный метод не вызывается напрямую пользователем класса, вызов происходит в конструкторе каждого класса. Все три класса имеют одинаковый интерфейс для получения результатов вычисления.
- Проект «Курсовая работа по ООП»
Второй проект состоит из файлов:
«MainForm.cs», в котором определен класс главного окна приложения, а также методы и события, отвечающие за взаимодействие разных частей программы;
«SettingsForm.cs» – в файле определен класс окна настроек отображения графики;
«AboutBox.cs» – файл содержит класс окна «О программе».
Обязательным условием успешного построения проекта является соблюдение зависимостей, а именно наличие ссылок на библиотеки DLL: IntegralClassLibrary.dll и ZedGraph.dll. Первая, из которых разрабатывается в рамках первого рассмотренного проекта библиотеки «IntegralClassLibrary». Вторая представляет собой сторонний элемент управления не входящий в комплект поставки MS VS 2008, содержит классы позволяющие выводить графику в пространство указанного компонента, который в свою очередь располагается на главной форме приложения. Файл ZedGraph.dll должен находиться в папке с программой.
- Листинги программы
- Листинг файла «Integrals.cs»
using System;
namespace Patsev.Integrals
{
public abstract class Integral
{
public Integral(double a, double b, int n)
{
this.a
= a; this.b = b; this.n = n;
//вычисление интеграла
Solve();
//вычисление погрешности
accuracy = Math.Abs(Exact_value(a, b) - square);
}
public static double
F(double x)
{
return 1 / Math.Sqrt(1 + x * x);
}
protected static double Exact_value(double a, double b) //точное значение определенного интеграла