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

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

          if(stream == NULL)

            cout<<"Oshibka otkrutiya faila. Prover'te pravilnost pyti faila.";

          else

          {

            stream>>x1>>x2>>a>>b>>c>>n;

            stream.close();

            break;

          }

        }

        while(1);

        break;

      case 'e'://выход

        exit(1);

        break;

      default://любая другая клавиша = неудачный выбор подменю

        successVubor = 1;

    }

    if(!successVubor)//если был осуществлен ввод исходных данных => проверка на их корректность

    {

      if(x1 == x2)

      {

        cout<<"Oshibka. Nylevoj interval integrirovaniya. Povtorite vvod.";

        successVubor = 1;

      }

     

      if((x1 > 1000) || (x1 < -1000) || (x2 > 1000) || (x2 < -1000))

      {

        cout<<"Oshibka. Predelu integrirovaniya doljnu but' ot -1000 do 1000. Povtorite vvod.";

        successVubor = 1;

      }

 

      if((n < 1) || (n > 500))

      {

        cout<<"Oshibka. Chislo razbienij doljno but 0 < n <= 500.";

        successVubor = 1;

      }

    }

  }

  while(successVubor);//пока не будет осуществлен корректный ввод исходных данных

 

  for(int k = 0; k < 3; k++)//для каждого из 3х уравнений

  {//вычисляем приближенное  значение интеграла, точное значение, абсолютную и относительную погрешности

    float pribl = integr(x1, x2, n, a, b, c, k),

      toch = integrToch(x1, x2, a, b, c, k);

    cout<<"\n\nReshaem integral ot "<<(k + 1)<<" yravneniya.\nNaidennoe znachenie: "<<

    pribl<<

    "\nTochnoe znachenie: "<<toch<<

    "\nAbsolytnaya pogr: "<<fabs(pribl - toch)<<

    "\nOtnositelnaya pogr: "<<fabs((pribl - toch)) / toch * 100;

  }

 

  getch();

  showGraphs(x1, x2, n, a, b, c);//отображаем графики этих уравнений

}

Integral.cpp – вычисление интеграла методом левых прямоугольников и получение точного решения интеграла

# ifndef __Func_cpp

# include "Func.cpp"

# endif

float integr(float x1, float x2, int n, float a, float b, float c, int k)

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

  float h = (x2 - x1) / n,//ширина одного прямоугольника

    znInt = 0;//значение интеграла (сумма площадей прямоугольников)

  for(int i = 0; i < n; i++)//вычисление суммы

    znInt += h * y(x1 + i * h, a, b, c, k);

  return znInt;

}

 

float integrToch(float x1, float x2, float a, float b, float c, int k)

{//точное решение интеграла  = первообразная(х2) - первообразная(х1)

  return yPervoobr(x2, a, b, c, k) - yPervoobr(x1, a, b, c, k);

}

Func.cpp – вычисление значения функции и ее первообразной от заданного аргумента

# ifndef __math_h

# include <math.h>

# endif

 

float y(float x, float a, float b, float c, int k)

{//значение фукнции под  номером k(нумерация с нуля) при аргументе x, с заданными коэффициентами a, b, c

  switch(k)

  {

    case 0:

      return a * pow(x, 3) + b * x + c;

    case 1:

      return a * sin(x + b) + c;

    case 2:

    {

      if(x + b != 0)

        return a / (x + b) + c;

      else

      {

        cout<<"Oshibka. Znamenatel' prinimaet nylevoe znachenie!";

        return 0;

      }

    }

    default:

      return 0;

  }

}

float yPervoobr(float x, float a, float b, float c, int k)

{//первообразная функций

  switch(k)

  {

    case 0:

      return a * pow(x, 4) / 4 + b * pow(x, 2) / 2 + c * x;

    case 1:

      return - a * cos(x + b) + c * x;

    case 2:

      if(x + b != 0)

        return a * log (x + b) + c * x;

      else

      {

        cout<<"Oshibka. Argyment logarifma prinimaet nylevoe znachenie!";

        return 0;

      }

    default:

      return 0;

  }

}

Graph.cpp – отображение графиков функций и процесс вычисления интеграла в графическом режиме

#include <graphics.h>

#include <values.h>

 

int gdriver = DETECT, gmode, errorcode;

void showGraph(float x1, float x2, int n, float a, float b, float c, int k,

  int miny, int maxy)

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

  float h = (x2 - x1) / n;//ширина одного прямоугольника

  int minx = 20,// и miny, maxy - границы области в которой нужно нарисовать график

      maxx = 600;

 

  float y1 = MAXDOUBLE,//мин и макс значение функции

    y2 = -MAXDOUBLE,

    dx;

  for(int i = 0; i <= n; i++)

  {//поиск мин и макс значений функции у1 и у2

    float zn = y(x1 + i * h, a, b, c, k);

    if(y1 > zn)

      y1 = zn;

    if(y2 < zn)

      y2 = zn;

  }

  float kx, ky;//коэффициенты растяжения графика по 0х и по 0у на всю область

  kx = (maxx - minx)/(x2 - x1);

  ky = (maxy - miny)/(y2 - y1);

  int Oy = ky * y2 + miny;//где находится ось (уравнение x=0)

  int OyOtobr;//отображаемая ось

  if (ky * y2 + miny > maxy)//если уравнение x=0 находится вне области отображения графика, отображаем ось внизу области

    OyOtobr = maxy;

  else//иначе на том уровне, где она должна быть

    OyOtobr = ky * y2 + miny;

 

  dx = kx * h;//шаг по 0х в пиксельном выражении

 

  setcolor(GREEN);//прямоугольники зеленым

  for(i = 0; i < n; i++)

    rectangle(minx + dx * i, Oy - y(x1 + i * h, a, b, c, k) * ky,

      minx + dx * (i + 1), OyOtobr);

 

  setcolor(RED);//график красным

  moveto(minx, Oy - y(x1, a, b, c, k) * ky);//встаем  в начало

  for(i = 0; i <= n; i++)//и прорисовываем  график

    lineto(minx + dx * i, Oy - y(x1 + i * h, a, b, c, k) * ky);

 

  setcolor(WHITE);//оси белым

  moveto(minx, OyOtobr);//прорисовка  осей

  lineto(maxx + 8, OyOtobr);

  lineto(maxx + 3, OyOtobr - 5);

  moveto(maxx + 8, OyOtobr);

  lineto(maxx + 3, OyOtobr + 5);

 

  moveto(minx, maxy);

  lineto(minx, miny - 8);

  lineto(minx + 5, miny - 3);

  moveto(minx, miny - 8);

  lineto(minx - 5, miny - 3);

 

  if(x1 * x2 < 0)//отображение точки (0,0), если она оказалась в отображаем области

    outtextxy(minx - x1 * kx - 3, OyOtobr + 5, "(0,0)");

}

void showGraphs(float x1, float x2, int n, float a, float b, float c)

{

  initgraph(&gdriver, &gmode,"");//переход в графический режим

  showGraph(x1, x2, n, a, b, c, 0, 10, 150);//отображение графика первого уравнения на участке экрана от 10 до 150 пикселей сверху

  showGraph(x1, x2, n, a, b, c, 1, 172, 322);//отображение графика второго уравнения -//-

  showGraph(x1, x2, n, a, b, c, 2, 344, 470);//отображение графика третьего уравнения -//-

  getch();

  closegraph();//выход из графического режима

}

10.Выводы по работе

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

11.Использованная литература

 

  1. Wikipedia. Метод прямоугольников. http://ru.wikipedia.org/wiki/Метод_прямоугольников. Интернет ресурс. Вход свободный.

 

  1. Комбинаторика. http://webmath.exponenta.ru/s/c/algebra/content/chapter4/section3/paragraph9/theory.html. Интернет ресурс. Вход свободный.

 


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