Разработка алгоритма программы нахождения интеграла методом Симпсона

Вычисление значения интеграла численным методом Симпсона. Оценка погрешности метода с помощью интерполяционного многочлена Эрмита. Разработка алгоритма и программы (определение функциональных модулей). Обоснование выбора языка программирования С++.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 30.04.2009
Размер файла 214,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

16

ТУЛЬСКИЙ АРТИЛЛЕРИЙСКИЙ ИНЖЕНЕРНЫЙ ИНСТИТУТ

Кафедра №10 "Математического, программного и

информационного обеспечения АСУ"

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту по дисциплине

"1001 - Дискретная математика"

Тема: "Разработка алгоритма программы нахождения интеграла

методом Симпсона"

Руководитель:

Исполнитель:

Содержание

  • Введение
    • 1. Постановка и уяснение задачи
    • 1.1 Анализ предметной области
    • 1.1.1 Обзор методов
    • 1.1.2 Метод Симпсона
    • 1.1.3 Оценка погрешности метода Симпсона
    • 2. Разработка алгоритма и программы
    • 2.1 Разработка алгоритма
    • 2.2 Обоснование выбора языка программирования
    • 2.3 Разработка программы
    • 3. Экспериментальное исследование алгоритма и программы
    • 3.1 Решение задачи методом Симпсона
    • 3.2 Тестирование программы
    • 3.3 Руководство программисту
    • Заключение
    • Список литературы
    • Приложения

Введение

Определенный интеграл от функции, имеющей неэлементарную первообразную, можно вычислить с помощью той или иной приближенной формулы. Для решения этой задачи на компьютере можно воспользоваться достаточно простыми формулами прямоугольников, трапеций или формулой Симпсона.

В данной работе рассматривается именно последняя. Формула Симпсона относится к приёмам численного интегрирования. Получила название в честь британского математика Томаса Симпсона (1710-1761).

Численное интегрирование (историческое название: квадратура) - вычисление значения определённого интеграла (как правило, приближённое), основанное на том, что величина интеграла численно равна площади криволинейной трапеции, ограниченной осью абсцисс, графиком интегрируемой функции и отрезками прямых и , где и - пределы интегрирования.

Необходимость применения численного интегрирования чаще всего может быть вызвана отсутствием у первообразной функции представления в элементарных функциях и, следовательно, невозможностью аналитического вычисления значения определённого интеграла по формуле Ньютона-Лейбница. Также возможна ситуация, когда вид первообразной настолько сложен, что быстрее вычислить значение интеграла численным методом.

1. Постановка и уяснение задачи

Необходимо разработать алгоритм и программу, выполняющую задачу вычисления приближённого значения интеграла функции f (x) на интервале [a,b] с точностью до e.

Необходимо провести анализ существующих методов решения поставленной задачи. Определить метод, который решает поставленную задачу за минимальное число шагов.

Наиболее подходящим мы считаем метод Симпсона. Поэтому решаем поставленную задачу этим методом с использованием функций и процедур языка программирования C++.

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

1.1 Анализ предметной области

1.1.1 Обзор методов

В прикладных исследованиях часто возникает необходимость вычисления значения определённого интеграла

(1.1)

Этот интеграл может выражать площадь, объём, работу переменной силы и т.д.

Если функция f (x) непрерывна на a,b и её первообразную F (x) удаётся выразить через известные функции, то для вычисления интеграла (1.1) можно воспользоваться формулой Ньютона-Лейбница:

(1.2)

К сожалению, в подавляющем большинстве случаев получить значение определённого интеграла с помощью формулы (1.2) или других аналитических методов не удаётся или, в случае задания функции f (x) таблицей, - невозможно. Обычно для вычисления значения определённого интеграла применяют специальные численные методы. Наиболее широко на практике используются квадратурные формулы - приближённые равенства вида:

, (1.3)

Где xi - некоторые точки из отрезка a,b - называемые узлами квадратурной формулы; Ai - числовые коэффициенты, называемые весами квадратурной формулы; N - целое число; - квадратурная сумма, которая принимается за приближённое значение интеграла.

Погрешностью квадратурной формулы называется разность

Говорится, что квадратурная формула (1.3) точна для многочленов степени m, если для любого многочлена степени не выше m эта формула даёт точное значение интеграла, т.е.

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

формула прямоугольников;

формула трапеций;

формула Симпсона.

Выведем простейшие квадратурные формулы. Будем интерпретировать интеграл (1.1) как площадь криволинейной трапеции, ограниченной графиком функции y=f (x) (при f (x) 0), осью абсцисс и прямыми x=a, x=b. Разобьём отрезок a,b на элементарные отрезки xi-1,xi точками a=x0<x1<x2…<xn=b. Интеграл I разобьётся при этом на сумму элементарных интегралов:

, где

Введём обозначения:

fi = f (xi), fi-1/2 = f (xi-1/2), где xi-1/2 = (xi-1 + xi) /2, i = 1,2,…,n.

Для простоты будем считать шаг постоянным h = xi xi-1, i = 1,2,…,n.

Простейшим методом численного интегрирования является метод прямоугольников. Он непосредственно использует замену определённого интеграла суммой (1.3). В качестве узлов квадратурной формулы могут выбираться левые xi-1 (метод левых прямоугольников) или правые xi (метод правых прямоугольников) границы элементарных отрезков. Для этих двух случаев получаются следующие формулы соответственно:

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

Метод трапеций использует линейную интерполяцию, т.е. график функции f (x) представляется в виде ломаной, соединяющей точки (xi, yi) и (xi+1, yi+1) i=0,1,2,…,n. В этом случае площадь всей фигуры (криволинейной трапеции) складывается из площадей элементарных прямолинейных трапеций. Площадь каждой такой трапеции равна произведению полусуммы оснований на высоту:

Складывая все эти равенства, можно получить формулу трапеций для численного интегрирования:

В случае h-const, эта формула принимает следующий вид:

Наиболее эффективным среди простейших методов приближенного вычисления интегралов является метод Симпсона.

1.1.2 Метод Симпсона

Пусть отрезок [a,b] разделен на чётное число n равных частей с шагом h. На каждом отрезке [x0,x2], [x2,x4], …, [xi-1,xi+1], …, [xn-2,xn] подынтегральную функцию f (x) заменим интерполяционным многочленом второй степени:

f (x) i (x) =aix2+bix+ci, xi-1 x xi+1, i=1,3,…,n-1.

Коэффициенты этих квадратных трёхчленов находятся из условия равенства многочлена в точках xi соответствующим значениям fi. В качестве i (x) можно принять интерполяционный многочлен Лагранжа второй степени, проходящий через точки (xi-1, fi-1), (xi, fi), (xi+1, fi+1), который имеет следующий вид:

или

Элементарная площадь Si может быть вычислена с помощью определённого интеграла. Учитывая, что h-const, получаем:

Проведя такие вычисления для каждого отрезка [xi-1,xi+1], i=1,3,…,n-1 и, просуммировав полученные выражения, можно получить следующую формулу Симпсона для численного интегрирования:

или

1.1.3 Оценка погрешности метода Симпсона

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

если f (x) =a0+a1x+a2x2+a3x3. Это утверждение нетрудно проверить непосредственно.

Для оценки погрешности формулы Симпсона воспользуемся интерполяционным многочленом Эрмита. Построим многочлен третьей степени H3 (x) такой, что

.

Такой многочлен существует и единствен.

Однако нам даже не потребуется явный вид многочлена H3 (x). Вспоминая, что формула

Симпсона точна для любого многочлена третьей степени, получим

Представим теперь f (x) в виде

f (x) =H3 (x) +ri (x), x [xi-1,xi],

где ri (x) - погрешность интерполирования многочленом Эрмита H3 (x).

Интегрируя выражение, получим

Далее имеем

поэтому для погрешности получаем оценку:

где

Вычисляя интеграл приходим к окончательной оценке

Погрешность составной формулы Симпсона оценивается так

Отсюда видно, что формула Симпсона существенно точнее, чем формулы прямоугольников и трапеций. На частичном отрезке она имеет точность О (h5), а на всем отрезке - O (h4)

2. Разработка алгоритма и программы

2.1 Разработка алгоритма

Для решения поставленной задачи необходимо выполнить следующие действия:

1) Задать подинтегральную функцию;

2) Ввести значения границ отрезков;

3) Ввести значение точности вычислений;

4) Вычислить интеграл методом Симпсона.

Для реализации этих действий программа состоит из следующих функциональных модулей:

1) Функция f - задает подинтегральную функцию;

2) Функция integralsimpson - вычисляет интеграл методом Симпсона;

3) Основной (главный) модуль программы осуществляет ввод значения границ отрезков, точности интегрирования и вызов функции вычисления интеграла, а также вывод результатов работы программы на экран.

В соответствии с приведённым словесным описанием алгоритма решения поставленной задачи разработана блок схема решаемой задачи, которая изображена далее.

Функция определения подинтегральной функции float f (float x)

16

Основная программа

2.2 Обоснование выбора языка программирования

С++ - это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьёзного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования Си.

Помимо возможностей, которые дает С, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определённых пользователем. Такие объекты просты и надёжны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод даёт более короткие, проще понимаемые и легче контролируемые программы. С++ обеспечивает полный набор операторов структурного программирования. Он также предлагает необычно большой набор операций. Многие операции С++ соответствуют машинным командам, и поэтому допускают прямую трансляцию в машинный код. Разнообразие операций позволяет выбирать их различные наборы для минимизации результирующего поля. С ++ поддерживает указатели не переменные и функции. Указатель на объект программы соответствует машинному адресу этого объекта. Посредством разумного использования указателей можно создавать эффективно-выполняемые программы, так как указатели позволяют ссылаться на объекты тем же самым путём, как это делает машина. С++ поддерживает арифметику указателей, и тем самым позволяет осуществлять непосредственный доступ и манипуляции с адресами памяти.

В своём составе С++ содержит препроцессор, который обрабатывает текстовые файлы перед компиляцией. Среди его наиболее полезных приложений при написании программ на С++ являются: определение программных констант, замена вызова функций аналогичными, но более быстрыми макросами, условная компиляция. Препроцессор не ограничен процессированием только исходных текстовых файлов С ++, он может быть использован для любого текстового файла. С++ - гибкий язык, позволяющий принимать в конкретных ситуациях самые разные решения.

2.3 Разработка программы

Основываясь на разработанном алгоритме и выбранном языке программирования, была написана программа.

Программа состоит из главной функции и двух подпрограмм.

Описательная часть программы начинается с подключения стандартных библиотек “iostream”, “stdio”, “math", “conio", “stdlib”.

#include<stdio. h>

#include<stdlib. h>

#include<math. h>

#include<conio. h>

#include<iostream. h>

Затем описываем функцию для ввода подинтегральной функции:

float f (float x)

{

float result;

result=log (x);

return result;

};

Далее описывается основная функция подсчета интеграла от введенной функции по формуле Симпсона:

double integralsimpson (float a, float b, float e)

{

// инициализация переменных

float result;

float h;

float s;

float s1;

float s2;

float s3;

float x;

// ввод начальных значений интегральной суммы, шага

s2 = 1;

h = b-a;

s = f (a) +f (b);

// цикл достижения заданной точности вычислений

do

{

s3 = s2;

h = h/2;

s1 = 0;

x = a+h;

// цикл, подсчитывающий сумму при определенном разбиении

do

{

s1 = s1+2*f (x);

x = x+2*h;

}

while (x<b);

s = s+s1;

s2 = (s+s1) *h/3;

x = fabs (s3-s2) /15;

}

while (x>e);

result = s2;

return result;

}

В главной функции производится ввод начальных данных - границ интервала и точности вычислений, а также происходит вызов функции вычисления интеграла и результат выводится на экран.

int main (void)

{

clrscr ();

float a1;

float b1;

float epsilon;

printf ("Vvedite a ");

cin>>a1;

printf ("Vvedite b ");

cin>>b1;

printf ("Vvedite e ");

cin>>epsilon;

printf ("I=%f", integralsimpson (a1,b1,epsilon));

getch ();

return 0;

}

3. Экспериментальное исследование алгоритма и программы

3.1 Решение задачи методом Симпсона

Пусть требуется вычислить определенный интеграл на интервале [a; b].

Далеко не всегда задача может быть решена аналитически. В частности, численное решение требуется в том случае, когда подынтегральная функция задана таблично. Для численного интегрирования подынтегральную функцию аппроксимируют какой-либо более простой функцией, интеграл от которой может быть вычислен. Обычно в качестве аппроксимирующей функции используют полином.

Реализуем в виде программы-функции вычисление определенного интеграла вида, используя формулу Симпсона с автоматическим выбором числа узлов. При этом программа-функция Simpson (f,a,b,N) вычисляет определенный интеграл по формуле Симпсона при фиксированном числе интервалов N, а программа-функция Adapt (f,a,b) выбирает по заданной точности вычисления интеграла количество интервалов.

Используя эти программы - функции вычислим определенный интеграл от функции f (x) = log (x) на отрезке [1,5] с точностью 0.01. Обращение к программе-функции Adapt дает результат

Adapt (f, 1,5) = 4.041567, который сравним с полученным в среде Borland C++.

Перед обращением к программе-функции Adapt необходимо описать функцию пользователя f (x) в виде

f (x): = log (x),

так как имя функции f (x) используется в качестве фактического параметра.

3.2 Тестирование программы

Решим при помощи программы задачу, рассматриваемую в прошлом разделе. Для этого подставим начальные значения, описанные в контрольном примере, в программу на языке MathCAD.

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

3.3 Руководство программисту

Для того чтобы программа работала необходимо, чтобы компьютер удовлетворял следующим минимальным системным требованиям:

Процессор: Intel Pentium 133 MHz.

Операционные системы: Microsoft Windows 9x, Windows 2000, Windows ХР, Windows Vista.

Оперативная память: 64 Mb.

Объем места, занимаемого программой на жестком диске: 1 Kb.

Монитор с разрешением VGA и выше.

Для внесения изменений в программу можно использовать среду Borland C++ или любую другую С++ ориентированную среду программирования.

Заключение

В данной курсовой работе решена задача приближённого интегрирования произвольной функции методом Симпсона.

В процессе создания курсовой работы приведено математическое описание метода, обоснование выбора этого метода для решения поставленной задачи, разработан алгоритм решения задачи в словесной форме, а также на языке блок-схем. По этому алгоритму на языке С++ составлена и отлажена программа.

В ходе тестирования были получены результаты работы метода Симпсона, по которым видно, что результаты интегрирования этим методом совпадают с достаточной точностью с аналитическим.

Программа является полностью работоспособной, что подтверждается результатами её тестирования.

Список литературы

1. Бахвалов Н.С. Численные методы / Н.С. Бахвалов, Н.П. Жидков, Г.М. Кобельков. - 3-е изд., перераб. и доп. - М.: БИНОМ. Лаборатория знаний, 2003 - 632 с.

2. Бронштейн И.Н., Семендяев К.А. Справочник по высшей математике для инженеров и учащихся втузов. - М.: Наука, 1981. - 718 с.

3. Самарский А.А., Гулин А.В. Численные методы. М.: Наука, 1989. - 430 с.

4. Дьюхарст С., Старк К. "Программирование на С++" Москва. Изд. "Печатный двор", 2006 - 462 с.

5. Шилдт Г. "Теория и практика С++" пер. с англ. - СПб.: BHV - Санкт - Петербург, 2007 - 581 с.

Приложения

Приложение A

Программный код

#include<stdio. h>

#include<stdlib. h>

#include<math. h>

#include<conio. h>

#include<iostream. h>

float f (float x)

{

float result;

result=log (x);

return result;

};

double integralsimpson (float a, float b, float e)

{

float result;

float h;

float s;

float s1;

float s2;

float s3;

float x;

s2 = 1;

h = b-a;

s = f (a) +f (b);

do

{

s3 = s2;

h = h/2;

s1 = 0;

x = a+h;

do

{

s1 = s1+2*f (x);

x = x+2*h;

}

while (x<b);

s = s+s1;

s2 = (s+s1) *h/3;

x = fabs (s3-s2) /15;

}

while (x>e);

result = s2;

return result;

}

int main (void)

{

clrscr ();

float a1;

float b1;

float epsilon;

float array [10] ;

printf ("Vvedite a ");

cin>>a1;

printf ("Vvedite b ");

cin>>b1;

printf ("Vvedite e ");

cin>>epsilon;

printf ("I=%f", integralsimpson (a1,b1,epsilon));

getch ();

return 0;

}


Подобные документы

  • Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.

    курсовая работа [832,6 K], добавлен 24.07.2012

  • Создание приложения, демонстрирующего решение нелинейного уравнения методом хорд, вычисление интеграла методом Симпсона. Характеристика системы программирования. Разработка мощных систем для работы с локальными и удаленными базами данных с помощью Delphi.

    дипломная работа [846,0 K], добавлен 22.09.2012

  • Разработка программы, выполняющей интегрирование методом входящих прямоугольников с кратностями и методом Симпсона. Расчет определённого интеграла приближенным и точным методами. Оценка погрешности при вычислении приблизительного значения интеграла.

    контрольная работа [71,7 K], добавлен 13.02.2016

  • Разработка программы нахождения значения определенного интеграла с помощью метода трапеций. Оценка абсолютной погрешности метода. Использование среды программирования Visual Studio Community 2015 для написания программы. Работа с графическим интерфейсом.

    курсовая работа [573,8 K], добавлен 17.03.2016

  • Численные методы. Создание программного продукта, использование которого позволит одновременно исследовать два метода вычисления определенных интегралов: метод трапеций и метод Симпсона. Рассмотрен ход вычисления интеграла в виде кода программы.

    курсовая работа [834,6 K], добавлен 14.04.2019

  • Особенности метода численного интегрирования функции одной переменной. Замена на каждом элементарном отрезке подынтегральной функции на многочлен первой степени (линейную функцию). Разработка алгоритма программы, ее листинг. Пример работы программы.

    контрольная работа [217,9 K], добавлен 14.07.2012

  • Математическое обоснование метода решения задачи: определенный интеграл, квадратурная формула Симпсона (формула парабол). Словесное описание алгоритма и составление его блок-схемы. Выбор языка программирования. Текст программы решения задачи, ее листинг.

    курсовая работа [593,6 K], добавлен 09.07.2012

  • Формулирование и создание программы по вычислению определенного интеграла по формуле трапеций с тремя десятичными знаками и по формуле Симпсона. Выбор Delphi как программного средства разработки программы. Создание алгоритма и листинг программы.

    курсовая работа [990,9 K], добавлен 15.06.2009

  • Проверить условие сходимости и записать расчетные формулы для нахождения корня уравнения. Составить блок-схему алгоритма, программу решения задачи. Вычисления определенного интеграла методом Симпсона. Построить график функции Y=1/sqr(3sin(x)+2cos(x)).

    курсовая работа [29,6 K], добавлен 02.10.2008

  • Формула Симпсона как интеграл от интерполяционного многочлена второй степени, рассмотрение сфер использования. Знакомство с основными особенностями и этапами написания программы для численного интегрирования с помощью формулы Симпсона, анализ примеров.

    практическая работа [153,8 K], добавлен 16.03.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.