Разработка программы, вычисляющей интеграл

Автор работы: Пользователь скрыл имя, 09 Сентября 2011 в 08:48, курсовая работа

Описание работы

Цель курсовой работы является приобретение и углубление знаний в области высокоуровневых методов информатики и программирования, получения дополнительных практических навыков в использовании основных приёмов обработки экспериментальных данных, численного решения определенных интегралов.

Численное интегральное исчисление – часто используемая тема в математике. При решении ряда актуальных физических и технических задач встречаются определенные интегралы от функций, первообразные которых не выражаются через элементарные функции. Кроме того, в приложениях приходится иметь дело с определенными интегралами, сами подынтегральные функции которых не являются элементарными. Это приводит к необходимости использования приближенных методов вычисления определенных интегралов.

Содержание работы

ВВЕДЕНИЕ

Нормативные ссылки

Список используемой литературы

Файлы: 1 файл

Пример_курсовой_ООП.doc

— 731.00 Кб (Скачать файл)

     Рисунок 4 – Ступенчатая фигура, состоящая из элементарных прямоугольников 

     Разобьем  основание этой трапеции, т.е. отрезок , на n равных частей (отрезков) длины (что равняется шагу разбиения) с помощью точек .  Можно записать, что , где .

     В середине каждого такого отрезка поставим ординату графика функции . Приняв эту ординату за высоту, построим прямоугольник с площадью .

     Тогда сумма площадей всех n прямоугольников дает площадь ступенчатой фигуры, представляющую собой приближенное значение искомого определенного интеграла

      .      (5)

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

     Рисунок 5 – Блок-схема к алгоритму решения определенных интегралов по методу прямоугольников

      1. Метод криволинейных трапеций

     Формула трапеций выводится аналогично формуле  прямоугольников: на каждом частичном отрезке криволинейная трапеция заменяется обычной.

     Рисунок 6 – Криволинейная фигура, полученная по методу криволинейных трапеций

     Разобьем  промежуток на n равных частей длины . Абсциссы точек деления . Пусть соответствующие им ординаты графика функции. Тогда расчетные формулы для этих значений примут вид: , , где .

     Заменим кривую ломаной линией, звенья которой соединяют концы ординат и , где . Тогда площадь криволинейной трапеции приближенно равна сумме площадей обычных трапеций с основаниями , и высотой :

     

     или

(6)
       – формула трапеций. (7)

     Абсолютная  погрешность приближения, полученного по формуле трапеций (7), оценивается с помощью формулы , где – наибольшее значение в промежутке . Так же, как и формула (4), формула трапеций (7) дает точный результат для линейной функции , поскольку .

    1. Метод Симпсона (парабол)

     Если  заменить график функции  на каждом отрезке разбиения не отрезками прямых, как в методах прямоугольников и трапеций, а дугами парабол, то получим более точную формулу приближенного вычисления определенного интеграла .

     Предварительно  найдем площадь S криволинейной трапеции, ограниченной сверху графиком параболы , сбоку – прямыми , и снизу – отрезком (см. рисунок 7).

     

     Рисунок 7 – Криволинейная фигура, ограниченная по сторонам прямыми и , а сверху графиком параболы  

     Пусть парабола проходит через три точки , , , где – ордината параболы в точке ; – ордината параболы в точке ; – ордината параболы в точке .

     Площадь криволинейной фигуры, показанной на рисунке 7 равна

           (8)

     Выразим эту площадь через  . Из равенств для ординат находим, что , .

     Подставляя  эти значения c и a в равенство (8), получаем 

      . (9)

     Получим теперь формулу парабол для вычисления интеграла  .

     Для этого отрезок  разобьем на 2n равных частей (отрезков) длиной точками , где . В точках деления вычисляем значения подынтегральной функции , где (рисунок 8).

 

     

     Рисунок 8 – Криволинейная фигура, полученная по методу Симпсона (парабол)

     Заменяем  каждую пару соседних элементарных криволинейных  трапеций с основаниями, равным h, одной элементарной параболической трапецией с основанием, равным 2h. На отрезке парабола проходит через три точки , , . Используя формулу (9), находим .

     Аналогично  находим

      ,

      .

     Сложив  полученные равенства, имеем  

     

     или

.
(10)
 

     Формула (10) называется формулой Симпсона (парабол). Абсолютная погрешность вычисления по формуле (10) оценивается соотношением

      , где  .

     Отметим, что формула (9) дает точное значение интеграла  во всех случаях, когда – многочлен, степень которого меньше или равна трем (тогда ). 
 
 
 
 
 
 

       

     Рисунок 9 – Блок-схема к алгоритму решения определенных интегралов по методу Симпсона (парабол)

 

    1. Описание  методов программирования, примененных в  работе
    1. Среда разработки и организация  решения

     Курсовая работа выполнена в интегрированной среде программирования MS Visual Studio 2008.

     Решение состоит из 2-х проектов:

    1. IntegralClassLibrary;
    2. Курсовая работа по ООП.
    1. Проект  библиотеки классов  «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( ) имеющего разные реализации в каждом классе-наследнике. Данный метод не вызывается напрямую пользователем класса, вызов происходит в конструкторе каждого класса. Все три класса имеют одинаковый интерфейс для получения результатов вычисления.

    1. Проект  «Курсовая работа по ООП»

     Второй  проект состоит из файлов:

     «MainForm.cs», в котором определен класс главного окна приложения, а также методы и события, отвечающие за взаимодействие разных частей программы;

     «SettingsForm.cs» – в файле определен класс окна настроек отображения графики;

     «AboutBox.cs» – файл содержит класс окна «О программе».

     Обязательным  условием успешного построения проекта является соблюдение зависимостей, а именно наличие ссылок на библиотеки DLL: IntegralClassLibrary.dll и ZedGraph.dll. Первая, из которых разрабатывается в рамках первого рассмотренного проекта библиотеки «IntegralClassLibrary». Вторая представляет собой сторонний элемент управления не входящий в комплект поставки MS VS 2008, содержит классы позволяющие выводить графику в пространство указанного компонента, который в свою очередь располагается на главной форме приложения. Файл ZedGraph.dll должен находиться в папке с программой.

 

    1. Листинги программы
    1. Листинг файла «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)       //точное значение определенного интеграла

Информация о работе Разработка программы, вычисляющей интеграл