Вычисление определенного интеграла методом Гаусса
Разработка программы нахождения значения определенного интеграла методом Гаусса, основанной на заданной функции и переключении между графическим и текстовым окнами для ввода исходной информации и вывода результатов интегрирования и на интерпретации.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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