Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
решение интеграла методом левых прямоугольников...docx
Скачиваний:
7
Добавлен:
22.09.2019
Размер:
550.85 Кб
Скачать

Приложение в.

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;

}

}

Приложение d.

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

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <values.h>

#include <math.h>

//# include <iostream.h>

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 f1(float x,float a)

{

return a*a*a/(x*x+a*a);

}

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 = 500,//мин и макс значение функции

y2 = -500,

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 = (int)(ky * y2 + miny);//где находится ось (уравнение x=0)

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

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

OyOtobr = maxy;

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

OyOtobr = (int)(ky * y2 + miny);

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

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

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

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

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

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

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

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

lineto((int)(minx + dx * i), (int)(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((int)(minx - x1 * kx - 3), OyOtobr + 5, "(0,0)");

}

main()

{

//float a,xp,yp,xt,yt;

int gdriver,gmode,i;

gdriver=DETECT;

printf("a=");

//scanf("%f",&a);

initgraph(&gdriver,&gmode,"");

/*xp=1;

yp=f1(xp,a)+150;

for(i=2;i<=640;i=i+10)

{

xt=i;

yt=f1(xt,a)+150;

line(xp,yp,xt,yt);

xp=xt;

yp=yt;

}*/

float x1 = 1, x2 = 4, a = 2, b = 0, c = 3;

int n = 10;

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

}