Вычисление определенного интеграла методом Гаусса

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

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

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

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

Федеральное агентство по образованию

Государственное образовательное учреждение высшего

профессионального образования

Уфимский Государственный Авиационный Технический

Университет

Кафедра автоматизированных систем управления

Вычисление определенного интеграла методом гаусса

Пояснительная записка к курсовой работе по дисциплине

«Информатика и программирование»

Белорецк 2009

Содержание

Задание на курсовую работу

Постановка задачи

Математическая модель для решения задачи

Блок-схема программы

Текст программы

Руководство пользователя

Результаты работы программы для различных вариантов

Примеры для всех ветвей работы программы (как для корректной, так и для некорректной работы)

Выводы по курсовой работе

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

Задание на курсовую работу

Разработать программу нахождения значения определенного интеграла методом Гаусса. Функция для интегрирования

y=xsinx / (1+x2)

Интервал интегрирования [0;22].

Исходные данные: интервал, количество разбиений отрезка.

Результат: график заданной функции.

Решение интегрировать графически (автоматическое масштабирование, название графика, метки на осях и обозначение осей).

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

Предусмотреть проверку корректности данных.

Постановка задачи

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

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

Для вычислений применяются 2-х-10-ти точечные методы. Для 2-5 точечных методов коэффициенты приведены в таблице.

Наиболее точным методом вычисления определенного интеграла считается десятиточечный метод Гаусса.

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

Коэффициенты при трехточечном методе следующие:

A1=5/9, A2=8/9, A3=5/9, , t2=0, t3=-t1

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

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

.

Затем частичные интегралы суммируются и находится конечный результат.

Математическая модель для решения задачи

В формуле Гаусса на каждом интервале интегрирования значение функции f(x) вычисляется не в равномерно распределенных по интервалу узлах, а в абсциссах, выбранных из условия обеспечения минимума погрешности интерполяции:

где n- число интервалов интегрирования, m - число вычисляемых на каждом интервале значений функции. , - границы интервалов интегрирования; и - коэффициенты значения которых определяются величиной m. Для m=3 A1=5/9, A2=8/9, A3=5/9, , t2=0, t3=-t1

Блок-схема программы

Текст программы

Uses

Crt, Graph;

const

A1=5/9;

A2=8/9;

A3=5/8;

t=-0.77459;

t2=0;

t3=-t; {константы для взятия интеграла методом Гаусса}

var

GraphDriver, GraphMode : Integer;

x, x_nach, x_kon, eps: real; {пределы интегрирования и точность вычисления}

MaxX, MaxY: integer;

y_min_FUN, y_max_FUN: real;

yFUN: array [1..1100] of real; {массив для хранения точек графика}

c: char;

i, j, n: integer; {указатели на эл.массива и т.д.}

{ * * * * * * * функция y(x) * * * * * * * * * * * *--}

Function FUN(x: real): real;

begin

FUN := x*sin(x)/(1+x*x);

end;

{ * * * * * * *--вычисление интеграла методом Гаусса * * * * *}

function Gauss (a, b, eps: real; var k:integer): real;

var

S, z, h, c, d, l, x, x1, x2, x3: real;

i, n: integer;

begin

n:=1;

S:=0;

k:=0;

repeat

k:=k+1; {увеличиваем число итераций}

z:=S; {предыдущее значение интеграла равно текущему}

n:=n*2; {в два раза увеличиваем число интервалов интегрирования}

h:=(b-a)/n;

x:=a;

S:=0;

c:=h/2;

l:=c*t; {определение шага интегрирования,

начального значения x, сам интеграл сначала равен 0,

вспомогательные переменные считаем }

for i:=0 to n-1 do {перебираем все интервалы интегрирования}

begin

d:=x+c;

x1:=d-l;

x2:=d;

x3:=d+l; {вычисляем значения абсцисс узлов,

выбранных из условия обеспечения минимума погрешности интерполяции}

S:=S+A1*(FUN(x1)+FUN(x3))+A2*FUN(x2); {добавляем к сумме}

x:=x+h; {переходим на новый интервал интегрирования}

end;

S:=S*c; {умножаем полученную сумму на h/2}

until (abs(z-S)<eps*abs(S)) or (k>=14);

Gauss := S;

end;

{ * * * * * *--построение Декарт. системы координат * * *-}

procedure Dekart (x_min, x_max, y_min, y_max: real);

var

x_i, y_i: real;

s: string;

i : real;

ii: integer;

nulx: integer;

koord_x, koord_y: integer;

begin

GraphDriver := Detect; {инициализация графики}

InitGraph(GraphDriver, GraphMode, '');

if GraphResult <> grOk then Halt(1);

nulx := round (MaxY-MaxY*(0-y_min)/(y_max - y_min));

setcolor(DarkGray);

Setlinestyle(1,1,1);

i := 0;

while i <= MaxY

do begin

line (0, round(i), MaxX, round(i)); {деление экрана на 10 частей}

i := i + (MaxY/20);

end;

i := 0;

while i <= MaxX

do begin

line (round(i), 0, round(i), MaxY);

i := i + (MaxX/20);

end;

Setlinestyle(0,1,1);

setcolor (white);

x_i := x_min;

for ii := 1 to 10 {разметка по осям}

do begin

koord_x := round (MaxX*(x_i-x_min)/(x_max-x_min));

koord_y := nulx+10;

Str (x_i:1:2, s);

OutTextXY (koord_x, koord_y, s);

x_i := x_i + (x_max-x_min)/10;

end;

y_i := y_min;

for ii := 1 to 10

do begin

koord_x := 5;

koord_y := round (MaxY-MaxY*(y_i-y_min)/(y_max - y_min));

Str (y_i:1:2, s);

OutTextXY (koord_x, koord_y-10, s);

y_i := y_i + (y_max - y_min)/10;

end;

setcolor (white);

OutTextXY (MaxX-15, nulx-12, 'X');

OutTextXY (MaxX-20, nulx-4, ' >');

OutTextXY (0, 4, '^ Y');

line (0, nulx, MaxX, nulx);

line (2, 0, 2, MaxY);

end;

{ * * *--расчет точек, мин и макс для графика функции *--}

Procedure CalcF (x_nach, x_kon: real);

var

x: real;

dx: real;

i: integer;

begin

x := x_nach;

i := 1;

dx := (x_kon-x_nach)/(MaxX-1);

y_min_FUN := FUN(x); y_max_FUN := FUN(x);

while x <= x_kon do

begin

yFUN[i] := FUN(x);

if yFUN[i] < y_min_FUN

then y_min_FUN := yFUN[i];

if yFUN[i] > y_max_FUN

then y_max_FUN := yFUN[i];

x := x + dx;

i := i + 1

end

end;

{ * * * *--построение функции y(x) * * * * * * * *}

Procedure GFUN;

var

i: integer;

koord_x1, koord_y1, koord_x2, koord_y2: integer;

begin

setcolor (White);

OutTextXY (40, 40, ' sin(x) ');

OutTextXY (40, 48, ' Y(x) = x* * * . Для продолжения нажмите ввод...');

OutTextXY (40, 56, ' (1+x^2) ');

for i := 1 to MaxX-2 do

begin

koord_x1 := i;

koord_y1 := round (MaxY-MaxY*(yFUN[i]-y_min_FUN)/(y_max_FUN - y_min_FUN));

koord_x2 := i+1;

koord_y2 := round (MaxY-MaxY*(yFUN[i+1]-y_min_FUN)/(y_max_FUN - y_min_FUN));

line (koord_x1, koord_y1, koord_x2, koord_y2)

end

end;

{======================================================================}

{ * * * * * * * * *--главная программа * * * * * * * *}

begin

GraphDriver := Detect;

InitGraph(GraphDriver, GraphMode, '');

if GraphResult <> grOk then Halt(1);

MaxX := GetMaxX;

MaxY := GetMaxY;

CloseGraph;

repeat

repeat

clrscr;

writeln ('Введите значения для вычисления графика:');

write (' X нач. = ');

readln (x_nach);

write (' Х кон. = ');

readln (x_kon);

write (' Точность = ');

readln (eps);

until (x_nach>=0) and (x_kon <= 22) and (x_nach<x_kon);

writeln ('Интеграл = ', Gauss ( x_nach, x_kon, eps, n):7:5,' ',n,' итераций');

writeln ('Для продолжения нажмите ввод...');

readln;

CalcF (x_nach, x_kon);

Dekart (x_nach, x_kon, y_min_FUN, y_max_FUN);

GFUN;

readln;

CloseGraph;

GotoXY(23,10);

writeln ('Для продолжения нажмите пробел,');

GotoXY(23,12);

writeln ('для выхода из программы - ESC.');

c := ReadKey;

until ord(c) = 27;

End.

Руководство пользователя

Для работы с программой требуется в среде Pascal 7.0 запустить файл GAUSS_010.pas. Или запустить откомпилированный файл GAUSS_010.exe. Для его работы требуется файл для вывода графической информации EGAVGA.BGI. После ввода значений для вычисления интеграла и количество разбиений отрезка происходит проверка вводимых данных. Если данные правильные - выводится графический экран и строится график данной функции. Если вводимые данные неправильные - они запрашиваются заново. Далее ожидается нажатие на ввод. Выводится сообщение о продолжении или выходе из программы. Если нужно выйти из программы - нажимаем Esc. Программа завершается.

Результаты работы программы для различных вариантов

Примеры для всех ветвей работы программы (как для корректной, так и для некорректной работы)

Примеры для корректной работы программы показаны на Рис.1 и Рис.2.

В случае некорректной роботы программа запрашивает данные заново.

Выводы по курсовой работе

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

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

1. Немнюгин С.А. Turbo Pascal. СПб.: Питер, 2000.- 496с.

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

3. Цикунов А.Е. Сборник Формул по математике. М.: Питер, 2009.-128с.

4. Бахвалов Н.С. Численные методы. М.: Просвещение, 1975.-245с.

5. Семашко Г.Л., Салтыков А.И. Программирование на языке паскаль. М.: Наука, 1988.-128с.


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

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

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

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

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

  • Математическое описание, алгоритм и программа вычисления определенного интеграла методом трапеций. Расчет n-значений исследуемой функции и вывод их в виде таблицы. Технические и программные средства. Входные и выходные данные, функциональное назначение.

    курсовая работа [21,0 K], добавлен 03.01.2010

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

    дипломная работа [7,4 M], добавлен 11.06.2012

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

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

  • Построение графика функции. Поиск корней уравнения методом половинного деления. Определение минимума функции методом перебора и значения аргумента. Вычисление определенного интеграла на заданном отрезке с использованием метода правых прямоугольников.

    контрольная работа [316,1 K], добавлен 13.11.2014

  • Применения численного интегрирования. Интерполяционные методы нахождения значений функции. Методы прямоугольников, трапеций и парабол. Увеличение точности, методы Гаусса и Гаусса-Кронрода. Функциональные модели и программная реализация решения задачи.

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

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

    курсовая работа [1,7 M], добавлен 15.06.2009

  • Выбор математической модели задачи. Применение численного интегрирования и его методы: прямоугольников, парабол, увеличения точности, Гаусса и Гаусса-Кронрода. Суть математического метода аппроксимации. Интерполяционные методы нахождения значений функции.

    курсовая работа [172,4 K], добавлен 08.04.2009

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

    курсовая работа [500,4 K], добавлен 28.05.2013

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