Автор работы: Пользователь скрыл имя, 23 Мая 2013 в 19:11, курсовая работа
2. Цель работы
Изучить теоретический материал для решения задачи создания программы вычисления интеграла методом левых прямоугольников. Разработать алгоритм решения поставленной задачи, разработать программу на языке С++, протестировать созданную программу, устранить ошибки, выявленные на этапе тестирования.
3. Задание
Составить алгоритм решения задачи, отобразить на экране в графическом режиме с учетом масштабирования процесс вычисления интеграла. Выдать на экран точное и приближенное значения интеграла, абсолютную и относительную погрешности вычисления.
Тема работы 3
2. Цель работы 3
3. Задание 3
4. Исходные данные 3
5. Описание метода решения задачи, программы и используемых алгоритмов 4
5.1. Структура проекта 4
5.2. Алгоритм работы проекта 4-5
5.3. Вычисление интеграла методом левых прямоугольников 5
5.4. Точное решение интеграла 6
5.5. Абсолютная и относительная погрешность вычисления 6
6. Описание методики тестирования программы 6-9
7. Руководство пользователя по работе с программой………………...10
8. Блок-схема программы 11-16
9. Распечатка текста программы 16-21
10. Выводы по работе 21
11. Использованная литература 22
Министерство образования
Российской Федерации
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра радиоэлектроники и защиты информации (РЗИ)
Курсовая работа на тему
«Программа вычисления интеграла методом левых прямоугольников»
Выполнил: студент 181 группы
Охлопкова К.М.
Проверил: аспирант кафедры РЗИ
Конкин Д.А.
Томск 2012
Оглавление
5.1. Структура проекта 4
5.2. Алгоритм работы проекта 4-5
5.3. Вычисление интеграла методом левых прямоугольников 5
5.4. Точное решение интеграла 6
5.5. Абсолютная и относительная погрешность вычисления 6
Программа вычисления интеграла методом левых прямоугольников
Изучить теоретический материал для решения задачи создания программы вычисления интеграла методом левых прямоугольников. Разработать алгоритм решения поставленной задачи, разработать программу на языке С++, протестировать созданную программу, устранить ошибки, выявленные на этапе тестирования.
Составить алгоритм решения задачи, отобразить на экране в графическом режиме с учетом масштабирования процесс вычисления интеграла. Выдать на экран точное и приближенное значения интеграла, абсолютную и относительную погрешности вычисления.
Число уравнений 3
Коэффициенты a, b, c – вещественные числа. Пределы интегрирования – вещественные числа, лежащие в пределах от -1000 до 1000. Число интервалов разбиения не более 500. Все параметры вводятся с клавиатуры или считываются из файла по выбору пользователя. Имя файла задается пользователем.
Проект состоит из файлов:
При запуске программы пользователю предоставляется выбор: ввести данные с клавиатуры или ввести название файла, из которого необходимо прочесть эти данные.
Исходные данные к программе:
х1 и x2 – пределы интегрирования (вещественные числа от -1000 до 1000)
a, b, c – коэффициенты в уравнениях (вещественные числа)
n – число интервалов разбиения (натуральное число не более 500).
При вводе пользователем данных проверяется их корректность. При обнаружении ошибки, повторяется процесс ввода.
Далее для каждого из 3х
уравнений вычисляются и
Затем отображаются графики и процесс вычисления интеграла для всех 3х уравнений в графическом режиме.
Метод прямоугольников —
метод численного интегрирования функции
одной переменной, заключающийся
в замене подынтегральной функции
на многочлен нулевой степени, то
есть константу, на каждом элементарном
отрезке. Если рассмотреть график подынтегральной
функции, то метод будет заключаться
в приближённом вычислении площади
под графиком суммированием площадей
конечного числа
Если отрезок является элементарным и не подвергается дальнейшему разбиению, значение интеграла можно найти по формуле левых прямоугольников:
В нашем случае h = (x2 – x1) / n– ширина одного прямоугольника.
Для вычисления значения функции создана функция
float y(float x, float a, float b, float c, int k)
Где x – значение аргумента,a, b, c – коэффициенты уравнения,k – номер уравнения (нумерация с 0).
Тогда функция вычисления
интеграла методом левых
floatintegr(float x1, float x2, int n, float a, float b, float c, int k)
{//вычисление интеграла методом левых прямоугольников
float h = (x2 - x1) / n,//ширина одного прямоугольника
znInt = 0;//значение интеграла (сумма площадей прямоугольников)
for(inti = 0; i< n; i++)//вычисление суммы
znInt += h * y(x1 + i * h, a, b, c, k);
returnznInt;
}
Точное решение интеграла
вычисляется стандартным
floatintegrToch(float x1, float x2, float a, float b, float c, int k)
{//точное решение интеграла = первообразная(х2) - первообразная(х1)
returnyPervoobr(x2, a, b, c, k) - yPervoobr(x1, a, b, c, k);
}
Где yPervoobr(floatx, floata, floatb, floatc, intk) – функция, вычисляющая значение первообразной от аргумента x уравнения kс коэффициентами a, b, c.
Абсолютная погрешность вычисления находится как модуль разности между точным и приближенным решением[2]
А относительной погрешностью приближённого числа называется отношение абсолютной погрешности приближённого числа к самому этому числу в процентном соотношении.
Так в нашем случае
fabs(pribl - toch) – абсолютная погрешность;
fabs(pribl - toch) / toch * 100 – относительная погрешность.
Где pribl – приближенное решение интеграла (методом левых прямоугольников), toch – точное решение интеграла.
Протестируем на корректное вычисление интеграла.
Файл «test.txt» содержит данные и находится в папке программы:
То есть пределы интегрирования [1, 4], a=2, b=0, c=3 – коэффициенты в уравнениях, n = 10 – число интервалов разбиения.
Большие значения погрешностей обусловлено малым количеством отрезков разбиения. При увеличении числа разбиений вычисления интеграла погрешность должна уменьшаться. Протестируем это условие.
Для n = 50:
Для n = 100:
Действительно, при увеличении числа отрезков разбиения погрешность вычисления уменьшается.
Рассмотрим работу программы при некорректном вводе данных:
Аналогично работает тестирование для остальных численных значений
Это основные тесты для программы. Программа прошла успешное тестирование, как на корректную работу, так и на корректное вычисление интегралов.
При запуске программы предоставляется выбор: ввести данные с клавиатуры или ввести название файла, из которого необходимо прочесть эти данные.
При вводе данных необходимо учесть, что:
При нарушении этих требований ввод данных необходимо повторить.
Файл с исходными данными должен иметь следующую структуру данных:
Значения x1,x2,a, b, c,n, разделенные пробелами или знаками переноса на следующую строку.
Если файл будет не найден, ввод необходимо повторить.
После корректного ввода данных будет отображены для заданных значений:
Для каждого из 3х уравнений:
И отображены графики этих уравнений для заданных исходных данных.
Главная программа проекта
Вычисление
интеграла методом левых
Вычисление точного значения интеграла
Вычисление значение функции с номером k
Вычисление значение первообразной от функции с номером k
Отображение графика одного уравнения с номером k на области от minx до miny по вертикали
Отображение трех графиков на одном экране
Main.cpp – главный элемент проекта
# include <iostream.h>
# include <conio.h>
# include <stdio.h>
# include <process.h>
# include <string.h>
#include "integral.cpp"
# ifndef __fstream_h
# include <fstream.h>
# endif
#include "graph.cpp"
void main()
{
float a, b, c,//коэффициенты уравнения
x1, x2;//пределы интегрирования
int n;//число интервалов разбиения
clrscr();
int successVubor,//успешный выбор команды меню и корректный выбор исходных значений
successVvod;//успещный ввод данных
do
{
cout<<"\nVvod dannuh:\n 1. S klaviatyru;\n 2. Iz faila;\n e. Vuhod.\n";
successVubor = 0;
switch(getch())
{
case '1'://ввод исходных данных с клавиатуры
do
{
fflush(stdin);//очистка буфера
cout<<"\nVvedite levuj predel integrirovaniya: ";
if((scanf("%f",&x1))==0)//если введено не число
{
cout<<"Tol'ko chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
do
{
fflush(stdin);//очистка буфера
cout<<"Vvedite pravuj predel integrirovaniya: ";
if((scanf("%f",&x2))==0)//если введено не число
{
cout<<"Tol'ko chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
do
{
fflush(stdin);//очистка буфера
cout<<"Vvedite znachenie a: ";
if((scanf("%f", &a))==0)//если введено не число
{
cout<<"Tol'ko chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
do
{
fflush(stdin);//очистка буфера
cout<<"Vvedite znachenie b: ";
if((scanf("%f", &b))==0)//если введено не число
{
cout<<"Tol'ko chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
do
{
fflush(stdin);//очистка буфера
cout<<"Vvedite znachenie c: ";
if((scanf("%f", &c))==0)//если введено не число
{
cout<<"Tol'ko chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
do
{
fflush(stdin);//очистка буфера
cout<<"Vvedite kolichestvo otrezkov razbienij: ";
if((scanf("%d", &n))==0)//если введено не число (округляется, если введено нецелое)
{
cout<<"Tol'ko celoe chislovoe znachenie!\n";
successVvod = 1;
}
else successVvod = 0;
}
while(successVvod);//пока не будет введено число
break;
case '2'://чтение данных из файла
do
{
cout<<"\nVvedite pyt' i imya faila (vuhod iz programmu: e): ";
char fileName[40];
cin>>fileName;
if(!strcmp(fileName, "e"))
exit(1);
ifstream stream(fileName, ios::in);
Информация о работе Программа вычисления интеграла методом левых прямоугольников