
Программирование на C / C++ / Лабораторные работы6 / Лаба-2
.doc
Лабораторная работа №2
по технологическому программированию
«Вычисление значений определенного интеграла методом прямоугольников и методом трапеций»
Выполнил: Егоров Михаил
Группа: БИ-1-05
Цель работы: разработать и отладить программу, которая будет осуществлять вычисление значения определенного интеграла двумя численными методами и сравнительный анализ этих методов.
1.Задание.
Необходимо разработать программу на языке Си, производящую вычисление определенного интеграла функции F(x) на отрезке [a,b] методом прямоугольников и методом трапеций.
2.Методы решения.
а) Метод прямоугольников.
б) Метод трапеций.
3.Описание переменных.
n – число итераций
x- текущее значение аргумента
dx – шаг выборки аргумента (х)
t0, t1 – промежуточные значения функции
a, b – пределы интегрирования
startp, endp, startt, endt – значения внутреннего таймера начала и конца выполнения расчетов методом прямоугольников и методом трапеций соответственно
st, sp – значения интеграла для методов трапеций и прямоугольников соответственно.
ct, cp – время выполнения расчетов для методов трапеций и прямоугольников.
4.Блок-схема.
5.Результат.
число итераций |
метод прямоугольников |
метод трапеций |
||
значение |
время |
значение |
время |
|
1000 |
0.000005 |
0.109890 |
0.000000 |
0.164835 |
6000 |
0.000002 |
0.604396 |
0.000006 |
1.153846 |
11000 |
0.000000 |
1.153846 |
0.000002 |
2.032967 |
16000 |
0.000006 |
1.703297 |
0.000000 |
3.021978 |
21000 |
0.000005 |
2.197802 |
0.000000 |
3.956044 |
26000 |
0.000000 |
2.747253 |
0.000000 |
4.890110 |
6.Исходный текст программы.
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <time.h>
void main()
{
clrscr();
clock_t startp,endp,startt,endt; //timer
int n; //chislo iteracii
double x; //argument
double t0,t1; //znach funkcii
float dx; //shag
float st,sp,ct,cp; //int i vremya
float a,b; //predely
a=0;
b=2*3.14159;
printf("N\tint_pryam\ttime_pryam\tint_trap\ttime_trap\n");
for (n=1000; n<30000; n+=5000)
{
st=0;
sp=0;
dx=(b-a)/n;
//metod trapecii
startt=clock();
for (x=a; x<=b; x+=dx)
{
t0=sin(x)+(0,5*sin(2*x));
t1=sin(x+dx)+(0,5*sin(2*(x+dx)));
st=st+(0.5*(t1-t0)*dx);
}
endt=clock();
//metod pryamougolnikov
startp=clock();
for (x=a; x<=b; x+=dx)
{
t0=sin(x)+(0,5*sin(2*x));
sp=sp+(t0*dx);
}
endp=clock();
//raschet vremeni
ct=(endt-startt)/CLK_TCK;
cp=(endp-startp)/CLK_TCK;
printf("%d\t%lf\t%lf\t%lf\t%lf\n",n,sp,cp,st,ct);
}
}