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

Автор работы: Пользователь скрыл имя, 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

Файлы: 1 файл

Kursovaya.docx

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

Министерство  образования                  

Российской  Федерации

 

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ 

СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

 

Кафедра радиоэлектроники и защиты информации (РЗИ)

 

 

 

 

 

Курсовая работа на тему

«Программа вычисления интеграла методом левых прямоугольников»

 

 

 

Выполнил: студент 181 группы

Охлопкова К.М.

Проверил: аспирант кафедры РЗИ

Конкин  Д.А.

 

 

 

 

 

 

Томск 2012

 

Оглавление

  1. Тема работы 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

  1. Описание методики тестирования программы 6-9
  2. Руководство пользователя по работе с программой………………...10
  3. Блок-схема программы 11-16
  4. Распечатка текста программы 16-21
  5. Выводы по работе 21
  6. Использованная литература 22

 

 

 

  1. Тема работы

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

  1. Цель работы

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

  1. Задание

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

  1. Исходные  данные

Число уравнений 3

  1. ;
  2. ;
  3. .

Коэффициенты a, b, c – вещественные числа. Пределы интегрирования – вещественные числа, лежащие в пределах от -1000 до 1000. Число интервалов разбиения не более 500. Все параметры вводятся с клавиатуры или считываются из файла по выбору пользователя. Имя файла задается пользователем.

  1. Описание  метода решения задачи, программы  и используемых алгоритмов

5.1.Структура проекта

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

  1. Main.cpp – главный элемент проекта;
  2. Integral.cpp – вычисление интеграла методом левых прямоугольников и получение точного решения интеграла;
  3. Func.cpp – вычисление значения функции и ее первообразной от заданного аргумента;
  4. Graph.cpp – отображение графиков функций и процесс вычисления интеграла в графическом режиме.

5.2.Алгоритм работы проекта

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

Исходные данные к программе:

х1 и x2 – пределы интегрирования (вещественные числа от -1000 до 1000)

a, b, c – коэффициенты в уравнениях (вещественные числа)

n – число интервалов разбиения (натуральное число не более 500).

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

Далее для каждого из 3х  уравнений вычисляются и отображаются на экран:

  1. Значение интеграла, вычисленного методом левых прямоугольников;
  2. Точное значение интеграла;
  3. Абсолютная погрешность вычисления;
  4. Относительная погрешность вычисления.

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

5.3.Вычисление интеграла методом левых прямоугольников

Метод прямоугольников —  метод численного интегрирования функции  одной переменной, заключающийся  в замене подынтегральной функции  на многочлен нулевой степени, то есть константу, на каждом элементарном отрезке. Если рассмотреть график подынтегральной  функции, то метод будет заключаться  в приближённом вычислении площади  под графиком суммированием площадей конечного числа прямоугольников, ширина которых будет определяться расстоянием между соответствующими соседними узлами интегрирования, а  высота — значением подынтегральной  функции в этих узлах. Алгебраический порядок точности равен 0[1].

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

В нашем случае 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;

}

5.4.Точное решение интеграла

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

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.

5.5.Абсолютная и относительная погрешность вычисления

Абсолютная погрешность  вычисления находится как модуль разности между точным и приближенным решением[2]

А относительной погрешностью приближённого числа называется отношение абсолютной погрешности приближённого числа к самому этому числу в процентном соотношении.

Так в нашем случае

fabs(pribl - toch) – абсолютная погрешность;

fabs(pribl - toch) / toch * 100 – относительная погрешность.

Где pribl – приближенное решение интеграла (методом левых прямоугольников), toch – точное решение интеграла.

6.Описание методики тестирования программы

Протестируем на корректное вычисление интеграла.

Файл «test.txt» содержит данные и находится в папке программы:

То есть пределы интегрирования [1, 4], a=2, b=0, c=3 – коэффициенты в уравнениях, n = 10 – число интервалов разбиения.

Большие значения погрешностей обусловлено малым количеством  отрезков разбиения. При увеличении числа разбиений вычисления интеграла  погрешность должна уменьшаться. Протестируем это условие.

Для n = 50:

Для n = 100:

Действительно, при увеличении числа отрезков разбиения погрешность  вычисления уменьшается.

Рассмотрим работу программы  при некорректном вводе данных:

  1. Неверный путь/имя файла:

  1. Попытка ввода символов для численного значения:

Аналогично  работает тестирование для остальных  численных значений

  1. Попытка ввода не натурального числа разбиений

Это основные тесты для программы. Программа  прошла успешное тестирование, как на корректную работу, так и на корректное вычисление интегралов.

 

 

7.Руководство пользователя по работе с программой.

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

При вводе данных необходимо учесть, что:

  1. Пределы интегрирования (x1 и x2) должны иметь значения от -1000 до 1000, их разность не должна быть нулевой;
  2. Коэффициенты в уравнениях являются (a, b, c) являются вещественными числами;
  3. Число интервалов разбиения (n) - натуральное число не более 500.

При нарушении этих требований ввод данных необходимо повторить.

Файл с исходными данными  должен иметь следующую структуру  данных:

Значения x1,x2,a, b, c,n, разделенные пробелами или знаками переноса на следующую строку.

Если файл будет не найден, ввод необходимо повторить.

После корректного ввода  данных будет отображены для заданных значений:

  1. Значение интеграла, вычисленного методом левых прямоугольников;
  2. Точное значение интеграла;
  3. Абсолютная погрешность вычисления;
  4. Относительная погрешность вычисления.

Для каждого из 3х уравнений:

  1. ;
  2. ;
  3. .

И отображены графики этих уравнений для заданных исходных данных.

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

 

 

 

Главная программа  проекта

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

Вычисление  точного значения интеграла

 

 

Вычисление  значение функции с номером k

Вычисление  значение первообразной от функции  с номером k

Отображение графика одного уравнения с номером k на области от minx до miny по вертикали

Отображение трех графиков на одном экране

9.Распечатка текста программы

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);      

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