- •Томский государственный университет систем управления и радиоэлектроники (тусур)
- •Курсовая работа на тему
- •Оглавление
- •Тема работы
- •5.3.Вычисление интеграла методом левых прямоугольников
- •5.4.Точное решение интеграла
- •5.5.Абсолютная и относительная погрешность вычисления
- •6.Описание методики тестирования программы
- •7.Руководство пользователя по работе с программой.
- •8.Блок-схема программы
- •9.Распечатка текста программы
- •Integral.Cpp– вычисление интеграла методом левых прямоугольников и получение точного решения интеграла
- •10.Выводы по работе
- •11.Использованная литература
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();//выход из графического режима
}