Код функции, осуществляющей вычисление определенного интеграла по методу центральных прямоугольников:
doublecentral_rectangles_integral(pointFuncf, doublea, doubleb, intn)
{
constdouble h = (b - a) / n; double sum = 0.0;
#pragmaomp parallel for reduction(+:sum) for (inti = 0; isum += f(a + ((i + 0.5)* h));
}
return (sum * h);
}
Код функции, обеспечивающий достижения заданной точности:
intmain()
{
setlocale(LC_ALL, "rus"); double a = 1;
double b = 3;
doublestart_time = 0; //точка отсчета времени doubleeps = 1 * pow(10.0, -6); //заданная точность int n = 1; //начальное число шагов
double p1, p0;
start_time = omp_get_wtime(); //засечение времени решения
p1 = central_rectangles_integral(f, a, b, n); //первое приближение для интеграла do
{
p0 = p1; n = 2 * n;
p1 = central_rectangles_integral(f, a, b, n);
}while (fabs(p1 - p0) >eps); //сравнение приближений с заданной точностью double t1 = omp_get_wtime() - start_time;
printf ("Значение интеграла по методу центральных прямоугол: %lf ; Затраченное время (в секундах): %lf\n", p1, t1);
}
Код функции, представляющий подынтегральную функцию:
typedefdouble(*pointFunc)(double); doublef(doublex)
{
return (-0.5 + 1.3*pow(x, 2) + 7.1*pow(x, 3));
}
Вычисления выполнены для подынтегральной функции
ƒ(𝑥) = .5 + 1. 𝑥2 + .1𝑥 на отрезке 1, с точностью = 1 1 .
В таблице приведены время и ускорение при реализации методов прямоугольника и Симпсона.
Таблица 1. Время и ускорение при реализации методов прямоугольника и Симпсона
Do'stlaringiz bilan baham: |