<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Valkyrie</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Valkyrie"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Valkyrie"/>
	<updated>2026-10-22T21:24:06Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25084</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25084"/>
		<updated>2017-12-11T16:09:55Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции - вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
Таким образом, на текущем отрезке интегрирования &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; выполняется следующая последовательность макроопераций:  &lt;br /&gt;
: подсчет &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; в качестве приближения значения интеграла на текущем отрезке интегрирования&lt;br /&gt;
: подсчет &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt; для последующей оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
: рекурсивное дробление текущего отрезка интегрирования на 2 подотрезка, если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. Однако, в виде, описанном выше, данный алгоритм не может эффективно воспользоваться этой особенностью.  В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров, после чего, применить описанный алгоритм к каждому такому отрезку параллельно. Стоит отметить, что алгоритм сгущает сетку вокруг точек &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся отрезки, ожидающие дальнейшего интегрирования. Таким образом, можно обеспечить равномерную нагрузку на все процессоры. &lt;br /&gt;
&lt;br /&gt;
Из написанного выше и того факта, что алгоритм адаптивно дробит определенные отрезки на 2 части, можно сделать следующий вывод - максимальная производительность может быть достигнута, если количество процессоров &amp;lt;math&amp;gt;p \approx 2k&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - количество точек &amp;quot;малой гладкости&amp;quot;. При дальнейшем увеличении количества процессоров скорость алгоритма будет лишь падать, так как результируещее количество подотрезков интегрирования, полученных в результате адаптивного дробления исходных отрезков, зависит в основном от &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, следовательно, сложность вычислений останется неизменной, а накладные расходы лишь увеличатся.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
Для более детального восприятия приведем некоторые из этих результатов в виде таблиц.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 8&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 61.02 || 30.79 || 15.74 || 7.92 || 4.03 || 4.03 || 4.02 || 7.19&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 16&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 232.29 || 117.49 || 60.34 || 30.23 || 15.37 || 7.99 || 7.75 || 13.57&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Таким образом, отличная распараллеливаемость хорошо видна до тех пор, пока число процессов не превосходит количество &amp;quot;особых&amp;quot; точек в 2 раза. Это связано с тем фактом, что алгоритм сгущает сетку лишь около &amp;quot;особых&amp;quot; точек, дробя отрезки, содержащие их, на 2 подотрезка.  &lt;br /&gt;
Очевидно, что дальнейшее увеличение числа процессоров никак не ускорит программу, а, скорее, наоборот, лишь замедлит ее из-за накладных расходов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для компиляции использовались &amp;lt;code&amp;gt; gcc (GCC) 4.4.7 &amp;lt;/code&amp;gt;  и &amp;lt;code&amp;gt; openmpi/1.8.4-gcc &amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Программа компилировалась при помощи команды &amp;lt;code&amp;gt; mpicc -std=c99 Adaptive.c -o Adaptive -lm -fopenmp &amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Запускалась: &amp;lt;code&amp;gt;./Adaptive k&amp;lt;/code&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; — количество &amp;quot;особых&amp;quot; точек. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Действительно широкого распространения, как, например, решение СЛАУ различными методами, данная задача не обрела. Тем не менее существует немало реализаций алгоритмов адаптивного интегрирования, например, таких как &amp;lt;ref&amp;gt;De Doncker E., Gupta A., Guo M. Adaptive multivariate integration using MPI //High-Performance Computing, 1997. Proceedings. Fourth International Conference on. – IEEE, 1997. – С. 152-158.&amp;lt;/ref&amp;gt; и &amp;lt;ref&amp;gt;Walawalkar M. P. Parallelization of adaptive quadrature rule-based integration methods : дис. – Texas Tech University, 2003.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25083</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25083"/>
		<updated>2017-12-11T15:25:49Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции - вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
Таким образом, на текущем отрезке интегрирования &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; выполняется следующая последовательность макроопераций:  &lt;br /&gt;
: подсчет &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; в качестве приближения значения интеграла на текущем отрезке интегрирования&lt;br /&gt;
: подсчет &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt; для последующей оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
: рекурсивное дробление текущего отрезка интегрирования на 2 подотрезка, если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся отрезки, ожидающие дальнейшего интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
Для более детального восприятия приведем некоторые из этих результатов в виде таблиц.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 8&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 61.02 || 30.79 || 15.74 || 7.92 || 4.03 || 4.03 || 4.02 || 7.19&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 16&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 232.29 || 117.49 || 60.34 || 30.23 || 15.37 || 7.99 || 7.75 || 13.57&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Таким образом, отличная распараллеливаемость хорошо видна до тех пор, пока число процессов не превосходит количество &amp;quot;особых&amp;quot; точек в 2 раза. Это связано с тем фактом, что алгоритм сгущает сетку лишь около &amp;quot;особых&amp;quot; точек, дробя отрезки, содержащие их, на 2 подотрезка.  &lt;br /&gt;
Очевидно, что дальнейшее увеличение числа процессоров никак не ускорит программу, а, скорее, наоборот, лишь замедлит ее из-за накладных расходов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для компиляции использовались &amp;lt;code&amp;gt; gcc (GCC) 4.4.7 &amp;lt;/code&amp;gt;  и &amp;lt;code&amp;gt; openmpi/1.8.4-gcc &amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Программа компилировалась при помощи команды &amp;lt;code&amp;gt; mpicc -std=c99 Adaptive.c -o Adaptive -lm -fopenmp &amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Запускалась: &amp;lt;code&amp;gt;./Adaptive k&amp;lt;/code&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; — количество &amp;quot;особых&amp;quot; точек. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Действительно широкого распространения, как, например, решение СЛАУ различными методами, данная задача не обрела. Тем не менее существует немало реализаций алгоритмов адаптивного интегрирования, например, таких как &amp;lt;ref&amp;gt;De Doncker E., Gupta A., Guo M. Adaptive multivariate integration using MPI //High-Performance Computing, 1997. Proceedings. Fourth International Conference on. – IEEE, 1997. – С. 152-158.&amp;lt;/ref&amp;gt; и &amp;lt;ref&amp;gt;Walawalkar M. P. Parallelization of adaptive quadrature rule-based integration methods : дис. – Texas Tech University, 2003.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25082</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25082"/>
		<updated>2017-12-11T15:16:12Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Описание схемы реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции - вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся отрезки, ожидающие дальнейшего интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
Для более детального восприятия приведем некоторые из этих результатов в виде таблиц.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 8&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 61.02 || 30.79 || 15.74 || 7.92 || 4.03 || 4.03 || 4.02 || 7.19&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 16&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 232.29 || 117.49 || 60.34 || 30.23 || 15.37 || 7.99 || 7.75 || 13.57&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Таким образом, отличная распараллеливаемость хорошо видна до тех пор, пока число процессов не превосходит количество &amp;quot;особых&amp;quot; точек в 2 раза. Это связано с тем фактом, что алгоритм сгущает сетку лишь около &amp;quot;особых&amp;quot; точек, дробя отрезки, содержащие их, на 2 подотрезка.  &lt;br /&gt;
Очевидно, что дальнейшее увеличение числа процессоров никак не ускорит программу, а, скорее, наоборот, лишь замедлит ее из-за накладных расходов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для компиляции использовались &amp;lt;code&amp;gt; gcc (GCC) 4.4.7 &amp;lt;/code&amp;gt;  и &amp;lt;code&amp;gt; openmpi/1.8.4-gcc &amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Программа компилировалась при помощи команды &amp;lt;code&amp;gt; mpicc -std=c99 Adaptive.c -o Adaptive -lm -fopenmp &amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Запускалась: &amp;lt;code&amp;gt;./Adaptive k&amp;lt;/code&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; — количество &amp;quot;особых&amp;quot; точек. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Действительно широкого распространения, как, например, решение СЛАУ различными методами, данная задача не обрела. Тем не менее существует немало реализаций алгоритмов адаптивного интегрирования, например, таких как &amp;lt;ref&amp;gt;De Doncker E., Gupta A., Guo M. Adaptive multivariate integration using MPI //High-Performance Computing, 1997. Proceedings. Fourth International Conference on. – IEEE, 1997. – С. 152-158.&amp;lt;/ref&amp;gt; и &amp;lt;ref&amp;gt;Walawalkar M. P. Parallelization of adaptive quadrature rule-based integration methods : дис. – Texas Tech University, 2003.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25081</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25081"/>
		<updated>2017-12-11T15:12:50Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции - вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся отрезки, ожидающие дальнейшего интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
Для более детального восприятия приведем некоторые из этих результатов в виде таблиц.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 8&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 61.02 || 30.79 || 15.74 || 7.92 || 4.03 || 4.03 || 4.02 || 7.19&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 16&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 232.29 || 117.49 || 60.34 || 30.23 || 15.37 || 7.99 || 7.75 || 13.57&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Таким образом, отличная распараллеливаемость хорошо видна до тех пор, пока число процессов не превосходит количество &amp;quot;особых&amp;quot; точек в 2 раза. Это связано с тем фактом, что алгоритм сгущает сетку лишь около &amp;quot;особых&amp;quot; точек, дробя отрезки, содержащие их, на 2 подотрезка.  &lt;br /&gt;
Очевидно, что дальнейшее увеличение числа процессоров никак не ускорит программу, а, скорее, наоборот, лишь замедлит ее из-за накладных расходов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для компиляции использовались &amp;lt;code&amp;gt; gcc (GCC) 4.4.7 &amp;lt;/code&amp;gt;  и &amp;lt;code&amp;gt; openmpi/1.8.4-gcc &amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Программа компилировалась при помощи команды &amp;lt;code&amp;gt; mpicc -std=c99 Adaptive.c -o Adaptive -lm -fopenmp &amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Запускалась: &amp;lt;code&amp;gt;./Adaptive k&amp;lt;/code&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; — количество &amp;quot;особых&amp;quot; точек. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Действительно широкого распространения, как, например, решение СЛАУ различными методами, данная задача не обрела. Тем не менее существует немало реализаций алгоритмов адаптивного интегрирования, например, таких как &amp;lt;ref&amp;gt;De Doncker E., Gupta A., Guo M. Adaptive multivariate integration using MPI //High-Performance Computing, 1997. Proceedings. Fourth International Conference on. – IEEE, 1997. – С. 152-158.&amp;lt;/ref&amp;gt; и &amp;lt;ref&amp;gt;Walawalkar M. P. Parallelization of adaptive quadrature rule-based integration methods : дис. – Texas Tech University, 2003.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25080</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25080"/>
		<updated>2017-12-11T15:10:14Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся отрезки, ожидающие дальнейшего интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
Для более детального восприятия приведем некоторые из этих результатов в виде таблиц.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 8&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 61.02 || 30.79 || 15.74 || 7.92 || 4.03 || 4.03 || 4.02 || 7.19&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 16&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 232.29 || 117.49 || 60.34 || 30.23 || 15.37 || 7.99 || 7.75 || 13.57&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Таким образом, отличная распараллеливаемость хорошо видна до тех пор, пока число процессов не превосходит количество &amp;quot;особых&amp;quot; точек в 2 раза. Это связано с тем фактом, что алгоритм сгущает сетку лишь около &amp;quot;особых&amp;quot; точек, дробя отрезки, содержащие их, на 2 подотрезка.  &lt;br /&gt;
Очевидно, что дальнейшее увеличение числа процессоров никак не ускорит программу, а, скорее, наоборот, лишь замедлит ее из-за накладных расходов.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для компиляции использовались &amp;lt;code&amp;gt; gcc (GCC) 4.4.7 &amp;lt;/code&amp;gt;  и &amp;lt;code&amp;gt; openmpi/1.8.4-gcc &amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Программа компилировалась при помощи команды &amp;lt;code&amp;gt; mpicc -std=c99 Adaptive.c -o Adaptive -lm -fopenmp &amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Запускалась: &amp;lt;code&amp;gt;./Adaptive k&amp;lt;/code&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; — количество &amp;quot;особых&amp;quot; точек. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Действительно широкого распространения, как, например, решение СЛАУ различными методами, данная задача не обрела. Тем не менее существует немало реализаций алгоритмов адаптивного интегрирования, например, таких как &amp;lt;ref&amp;gt;De Doncker E., Gupta A., Guo M. Adaptive multivariate integration using MPI //High-Performance Computing, 1997. Proceedings. Fourth International Conference on. – IEEE, 1997. – С. 152-158.&amp;lt;/ref&amp;gt; и &amp;lt;ref&amp;gt;Walawalkar M. P. Parallelization of adaptive quadrature rule-based integration methods : дис. – Texas Tech University, 2003.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25079</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=25079"/>
		<updated>2017-12-11T15:03:48Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся отрезки, ожидающие дальнейшего интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
Для более детального восприятия приведем некоторые из этих результатов в виде таблиц.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 16&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 232.29 || 117.49 || 60.34 || 30.23 || 15.37 || 7.99 || 7.75 || 13.57&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ k = 16&lt;br /&gt;
! Количество процессоров&lt;br /&gt;
! 1&lt;br /&gt;
! 2&lt;br /&gt;
! 4&lt;br /&gt;
! 8&lt;br /&gt;
! 16&lt;br /&gt;
! 32&lt;br /&gt;
! 64&lt;br /&gt;
! 128&lt;br /&gt;
|-&lt;br /&gt;
! Время, с&lt;br /&gt;
| 232.29 || 117.49 || 60.34 || 30.23 || 15.37 || 7.99 || 7.75 || 13.57&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Для компиляции использовались &amp;lt;code&amp;gt; gcc (GCC) 4.4.7 &amp;lt;/code&amp;gt;  и &amp;lt;code&amp;gt; openmpi/1.8.4-gcc &amp;lt;/code&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Программа компилировалась при помощи команды &amp;lt;code&amp;gt; mpicc -std=c99 Adaptive.c -o Adaptive -lm -fopenmp &amp;lt;/code&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Запускалась: &amp;lt;code&amp;gt;./Adaptive k&amp;lt;/code&amp;gt;, где &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; — количество &amp;quot;особых&amp;quot; точек. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Действительно широкого распространения, как, например, решение СЛАУ различными методами, данная задача не обрела. Тем не менее существует немало реализаций алгоритмов адаптивного интегрирования, например, таких как &amp;lt;ref&amp;gt;De Doncker E., Gupta A., Guo M. Adaptive multivariate integration using MPI //High-Performance Computing, 1997. Proceedings. Fourth International Conference on. – IEEE, 1997. – С. 152-158.&amp;lt;/ref&amp;gt; и &amp;lt;ref&amp;gt;Walawalkar M. P. Parallelization of adaptive quadrature rule-based integration methods : дис. – Texas Tech University, 2003.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24788</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24788"/>
		<updated>2017-12-01T01:48:18Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся отрезки, ожидающие дальнейшего интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Действительно широкого распространения, как, например, решение СЛАУ различными методами, данная задача не обрела. Тем не менее существует немало реализаций алгоритмов адаптивного интегрирования, например, таких как &amp;lt;ref&amp;gt;De Doncker E., Gupta A., Guo M. Adaptive multivariate integration using MPI //High-Performance Computing, 1997. Proceedings. Fourth International Conference on. – IEEE, 1997. – С. 152-158.&amp;lt;/ref&amp;gt; и &amp;lt;ref&amp;gt;Walawalkar M. P. Parallelization of adaptive quadrature rule-based integration methods : дис. – Texas Tech University, 2003.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24787</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24787"/>
		<updated>2017-12-01T01:47:55Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся отрезки, ожидающие дальнейшего интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Действительно широкого распространения, как, например, решение СЛАУ различными методами, данная задача не обрела. Тем не менее существует немало реализаций алгоритмов адаптивного интегрирования, например, таких как &amp;lt;ref&amp;gt;De Doncker E., Gupta A., Guo M. Adaptive multivariate integration using MPI //High-Performance Computing, 1997. Proceedings. Fourth International Conference on. – IEEE, 1997. – С. 152-158.&amp;lt;/ref&amp;gt; и &amp;lt;ref&amp;gt;Walawalkar M. P. Parallelization of adaptive quadrature rule-based integration methods : дис. – Texas Tech University, 2003.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24786</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24786"/>
		<updated>2017-12-01T01:46:50Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся еще не проинтегрированные отрезки.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Действительно широкого распространения, как, например, решение СЛАУ различными методами, данная задача не обрела. Тем не менее существует немало реализаций алгоритмов адаптивного интегрирования, например, таких как &amp;lt;ref&amp;gt;De Doncker E., Gupta A., Guo M. Adaptive multivariate integration using MPI //High-Performance Computing, 1997. Proceedings. Fourth International Conference on. – IEEE, 1997. – С. 152-158.&amp;lt;/ref&amp;gt; и &amp;lt;ref&amp;gt;Walawalkar M. P. Parallelization of adaptive quadrature rule-based integration methods : дис. – Texas Tech University, 2003.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24785</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24785"/>
		<updated>2017-12-01T01:46:20Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся еще не проинтегрированные отрезки. С данной точки зрения для параллельного алгоритма стоит воспользоваться схемой &amp;quot;мастер - рабочий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Действительно широкого распространения, как, например, решение СЛАУ различными методами, данная задача не обрела. Тем не менее существует немало реализаций алгоритмов адаптивного интегрирования, например, таких как &amp;lt;ref&amp;gt;De Doncker E., Gupta A., Guo M. Adaptive multivariate integration using MPI //High-Performance Computing, 1997. Proceedings. Fourth International Conference on. – IEEE, 1997. – С. 152-158.&amp;lt;/ref&amp;gt; и &amp;lt;ref&amp;gt;Walawalkar M. P. Parallelization of adaptive quadrature rule-based integration methods : дис. – Texas Tech University, 2003.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24784</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24784"/>
		<updated>2017-12-01T01:34:45Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся еще не проинтегрированные отрезки. С данной точки зрения для параллельного алгоритма стоит воспользоваться схемой &amp;quot;мастер - рабочий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|800px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24783</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24783"/>
		<updated>2017-12-01T01:34:25Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся еще не проинтегрированные отрезки. С данной точки зрения для параллельного алгоритма стоит воспользоваться схемой &amp;quot;мастер - рабочий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot; Суперкомпьютерного комплекса Московского университета. В качестве интегрируемой области был выбран отрезок &amp;lt;math&amp;gt;[a,b] = [0,10]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования составляла &amp;lt;math&amp;gt;\varepsilon = 10^{-6}&amp;lt;/math&amp;gt;, а интегрируемой функцией была &amp;lt;math&amp;gt;f_k(x) = \sum\limits_{i = 0}^{k-1} (x - x_i) * sin(\frac{1}{x - x_i})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x_i = a + \frac{b-a}{2k} + i * \frac{b-a}{k}&amp;lt;/math&amp;gt;. В процессе тестирования менялось количество &amp;quot;особых&amp;quot; точек &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; и число процессоров &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;. Число процессоров выбиралось как &amp;lt;math&amp;gt;2^i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;i = 0,1,..,7&amp;lt;/math&amp;gt;; количество &amp;quot;особых&amp;quot; точек - &amp;lt;math&amp;gt;4,5,..20,25,30&amp;lt;/math&amp;gt;. Ниже представлен график времени работы программы.&lt;br /&gt;
&lt;br /&gt;
[[file:ValkyrieScalability.png|thumb|center|700px|Рисунок 2. Параллельная реализация алгоритма адаптивного интегрирования]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24308</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24308"/>
		<updated>2017-11-26T23:00:39Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся еще не проинтегрированные отрезки. С данной точки зрения для параллельного алгоритма стоит воспользоваться схемой &amp;quot;мастер - рабочий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24307</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24307"/>
		<updated>2017-11-26T23:00:17Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся еще не проинтегрированные отрезки. С данной точки зрения для параллельного алгоритма стоит воспользоваться схемой &amp;quot;мастер - рабочий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, заданной в виде формулы на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24306</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24306"/>
		<updated>2017-11-26T22:58:57Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся еще не проинтегрированные отрезки. С данной точки зрения для параллельного алгоритма стоит воспользоваться схемой &amp;quot;мастер - рабочий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На вход алгоритму подается интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; и допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Результатом работы алгоритма является приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24305</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24305"/>
		<updated>2017-11-26T22:55:22Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Очевидным ресурсом параллелизма данного алгоритма является независимость интегрирования по разным отрезкам. В первую очередь, например, можно разбить исходный отрезок интегрирования на &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; частей, где &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; - количество процессоров. Стоит отметить, что алгоритм сгущает сетку вокруг отрезков &amp;quot;малой гладкости&amp;quot; интегрируемой функции, так что только разбиения начального отрезка интегрирования, вообще говоря, недостаточно для эффективной работы параллельного алгоритма. Для решения данной проблемы можно организовать, например, стек, в котором хранятся еще не проинтегрированные отрезки. С данной точки зрения для параллельного алгоритма стоит воспользоваться схемой &amp;quot;мастер - рабочий&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24299</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24299"/>
		<updated>2017-11-26T21:22:47Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|center|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, желтым - уточненной квадратурной формулы &amp;lt;math&amp;gt;\tilde{Q}(a,b)&amp;lt;/math&amp;gt;. Зеленым отмечены операции оценки ошибки интегрирования &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24298</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24298"/>
		<updated>2017-11-26T21:16:39Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|left|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования, желтым - уточненной квадратурной формулы. Зеленым отмечены операции оценивания ошибки интегрирования. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
Напомним, что уточненная квадратурная формула вычисляется следующим образом - &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,\frac{a+b}{2}) + Q(\frac{a+b}{2},b)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24297</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24297"/>
		<updated>2017-11-26T21:14:17Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|thumb|left|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования, желтым - уточненной квадратурной формулы. Зеленым отмечены операции оценивания ошибки интегрирования. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24296</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24296"/>
		<updated>2017-11-26T21:13:23Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;a = 0&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;b = 1&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = \left\{ \begin{matrix} sin(\pi x) \text{ при } x \in [0, \frac{1}{2}] \text{,} \\  1 - 4 (x - \frac{1}{2})^2 \text{ при } x \in [\frac{1}{2}, 1] \text{.}\end{matrix} \right. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:ValkyrieGraph.png|left|800px|Рисунок 1. Квадратики - задачи интегрирования &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; при допустимой погрешности &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, разбиение задачи на 2 происходит при условии &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;. Оранжевым выделены операции вычисления квадратурной формулы на данном отрезке интегрирования, желтым - уточненной квадратурной формулы. Зеленым отмечены операции оценивания ошибки интегрирования. Фиолетовым выделены операции сложения двух чисел. Красным отмечен результат работы алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24290</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24290"/>
		<updated>2017-11-26T20:40:53Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
На рисунке 1 приведена работа алгоритма при &amp;lt;math&amp;gt;\varepsilon = 4*10^{-6}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f(x) = &amp;lt;cases&amp;gt; sin(\pi x) \text{ при } // x^2 &amp;lt;/cases&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24267</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24267"/>
		<updated>2017-11-26T16:23:25Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 вычитание, 1 умножение и 2 деления, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;6(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;9k+4&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24266</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24266"/>
		<updated>2017-11-26T16:06:20Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезков. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 умножение и 1 деление, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;7k+3&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24265</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24265"/>
		<updated>2017-11-26T16:05:31Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Число операций, необходимых для вычисления приближенного значения интеграла, вообще говоря, зависит от допустимой погрешности интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и от степени гладкости интегрируемой функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;. Пусть алгоритм разбил &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; отрезков пополам, тогда в окончательном разбиении отрезка интегрирования получилось &amp;lt;math&amp;gt;k+1&amp;lt;/math&amp;gt; отрезка. На каждом таком отрезке и на этапе разбиения приходится считать &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, то есть необходимо произвести вычисление значений &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в 5 точках, для подсчета каждой квадратуры необходимо выполнить 3 сложения, 1 умножение и 1 деление, а также 1 сложение, 1 вычитание и 1 деление для проверки критерия разбиения отрезка пополам и 1 деление при каждом разбиении отрезка. Таким образом, получается:&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1)&amp;lt;/math&amp;gt; вычислений значения &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в некоторых точках&lt;br /&gt;
*&amp;lt;math&amp;gt;5(2k+1) &amp;lt;/math&amp;gt; сложений и вычитаний&lt;br /&gt;
*&amp;lt;math&amp;gt;7k+3&amp;lt;/math&amp;gt; делений и умножений&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24257</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24257"/>
		<updated>2017-11-26T14:44:23Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24256</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24256"/>
		<updated>2017-11-26T14:43:54Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; c = \frac{a+b}2 &amp;lt;/math&amp;gt; задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24224</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24224"/>
		<updated>2017-11-25T19:35:28Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Описание схемы реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, после чего оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24223</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24223"/>
		<updated>2017-11-25T19:34:34Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Описание схемы реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой погрешностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, а также оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой погрешностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24222</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24222"/>
		<updated>2017-11-25T19:33:20Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Описание схемы реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой точностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, а также оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = \frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;. Если &amp;lt;math&amp;gt;\tau &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, тогда приближенным значением интеграла на данном отрезке считаем величину &amp;lt;math&amp;gt;Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;. Иначе рекурсивно считаем таким же образом приближенные значения интеграла на отрезках &amp;lt;math&amp;gt;[a,c]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[c,b]&amp;lt;/math&amp;gt;, задав допустимой точностью на каждом отрезке величину &amp;lt;math&amp;gt;\frac{\varepsilon}{2}&amp;lt;/math&amp;gt;, а их сумму примем за результат.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24221</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24221"/>
		<updated>2017-11-25T19:26:00Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Описание схемы реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Последовательный алгоритм представляет собой рекурсивный подсчет приближенного значения интеграла на отрезке с заданной допустимой точностью. Начальным отрезком является весь отрезок интегрирования. Далее, на каждом шаге рекурсии происходит подсчет трех квадратурных формул - &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;Q(a,c)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Q(c,b)&amp;lt;/math&amp;gt;, а также оценивается погрешность интегрирования &amp;lt;math&amp;gt;\tau = &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24220</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24220"/>
		<updated>2017-11-25T19:12:29Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая представляет собой разность обычной  квадратурной формулы &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; и уточненной &amp;lt;math&amp;gt;\tilde{Q}(a,b) = Q(a,c) + Q(c,b)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24219</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24219"/>
		<updated>2017-11-25T19:09:15Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в трех точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая, как правило, представляет собой разность обычной  квадратурной формулы и уточненной.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24217</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24217"/>
		<updated>2017-11-25T19:06:58Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Далее в качестве квадратурной формулы будет использоваться формула Симпсона.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в некоторых точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая, как правило, представляет собой разность обычной  квадратурной формулы и уточненной.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24214</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24214"/>
		<updated>2017-11-25T18:49:29Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в некоторых точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая, как правило, представляет собой разность обычной  квадратурной формулы и уточненной.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24213</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24213"/>
		<updated>2017-11-25T18:46:51Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в некоторых точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая, как правило, представляет собой разность обычной  квадратурной формулы и уточненной.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Описание схемы реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24212</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24212"/>
		<updated>2017-11-25T18:45:15Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в некоторых точках, на каждом отрезке интегрирования. Так же на каждом отрезке подсчитывается ошибка интегрирования, которая, как правило, представляет собой разность обычной  квадратурной формулы и уточненной.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24211</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24211"/>
		<updated>2017-11-25T18:41:21Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в некоторых точках, на каждом отрезке интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как уже записано в описании ядра алгоритма, основную часть алгоритма составляют вычисление квадратурной формулы и подсчет ошибки интегрирования на текущем отрезке интегрирования. После чего решается уточнять ли значение квадратурной формулы на данном отрезке или нет.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24186</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24186"/>
		<updated>2017-11-25T16:59:29Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления квадратурной формулы, следовательно, и значений интегрируемой функций в некоторых точках, на каждом отрезке интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24183</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24183"/>
		<updated>2017-11-25T16:57:28Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основную часть алгоритма составляют вычисления кубатурной формулы, следовательно, и значений интегрируемой функций в некоторых точках, на каждом отрезке интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24177</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=24177"/>
		<updated>2017-11-25T16:52:52Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt; (&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie&amp;diff=23329</id>
		<title>Участник:Valkyrie</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie&amp;diff=23329"/>
		<updated>2017-10-22T20:04:14Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: Полностью удалено содержимое страницы&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=23328</id>
		<title>Участник:Valkyrie/Адаптивное интегрирование</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie/%D0%90%D0%B4%D0%B0%D0%BF%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5_%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;diff=23328"/>
		<updated>2017-10-22T20:03:31Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: Новая страница: «{{algorithm | name              = Адаптивное интегрирование | serial_complexity =  | input_data        =  | output_data       =  }}  Ав…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie&amp;diff=23327</id>
		<title>Участник:Valkyrie</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie&amp;diff=23327"/>
		<updated>2017-10-22T20:01:58Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «достаточно гладких» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie&amp;diff=23326</id>
		<title>Участник:Valkyrie</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie&amp;diff=23326"/>
		<updated>2017-10-22T20:00:37Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических [http://algowiki-project.org/ru/Квадратурные_формулы квадратурных формул ]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «хороших» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie&amp;diff=23325</id>
		<title>Участник:Valkyrie</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Valkyrie&amp;diff=23325"/>
		<updated>2017-10-22T19:57:41Z</updated>

		<summary type="html">&lt;p&gt;Valkyrie: Новая страница: «{{algorithm | name              = Адаптивное интегрирование | serial_complexity =  | input_data        =  | output_data       =  }}  Ав…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Адаптивное интегрирование&lt;br /&gt;
| serial_complexity = &lt;br /&gt;
| input_data        = &lt;br /&gt;
| output_data       = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Автор: [[Участник:Valkyrie|В.А. Мастинен]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Адаптивное интегрирование - это метод численного интегрирования, в котором интеграл функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; аппроксимируется с использованием статических квадратурных формул[http://algowiki-project.org/ru/Квадратурные_формулы]&amp;lt;ref&amp;gt;Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.&amp;lt;/ref&amp;gt; на адаптивно уточненных подынтервалах области интегрирования. Как правило, адаптивные алгоритмы столь же эффективны, как и традиционные алгоритмы для «хороших» подынтегральных функций, но также неэффективны для «плохих» подынтегральных функций, на которых традиционные алгоритмы терпят неудачу.&lt;br /&gt;
&lt;br /&gt;
Из анализа погрешностей методов численного интегрирования следует, что точность получаемых результатов зависит как от характера изменения подынтегральной функции, так и от шага интегрирования. При этом ясно, что для достижения сравнимой точности при интегрировании слабо меняющейся функции шаг можно выбирать большим, чем при интегрировании резко меняющихся функций.&lt;br /&gt;
&lt;br /&gt;
На практике нередко встречаются случаи, когда подынтегральная функция меняется по-разному на отдельных участках отрезка интегрирования. Это обстоятельство требует такой организации численного алгоритма, при котором он автоматически приспосабливался к характеру изменения функции -вводил разные значения шага интегрирования на отдельных участках отрезка интегрирования. Это позволяет уменьшить машинное время без потери точности результатов расчета. Такой подход используется обычно при задании подынтегральной функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; в виде формулы, а не в табличном виде.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Исходные данные : интегрируемая функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt;, определенная на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;, допустимая погрешность интегрирования &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычисляемые данные : приближенное значение &amp;lt;math&amp;gt;Q&amp;lt;/math&amp;gt; интеграла &amp;lt;math&amp;gt;\int\limits_a^b f(x)\,dx&amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Пусть &amp;lt;math&amp;gt;Q(a,b)&amp;lt;/math&amp;gt; - квадратурная формула, аппроксимирующая значение интеграла на отрезке &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Оценим &amp;lt;math&amp;gt;\tau \approx |Q(a,b) - \int\limits_a^b f(x)\,dx|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;\tau &amp;gt; \varepsilon&amp;lt;/math&amp;gt;, поделим отрезок &amp;lt;math&amp;gt;[a,b]&amp;lt;/math&amp;gt; пополам и применим этот же алгоритм к каждому из отрезков &amp;lt;math&amp;gt;[a,\frac{a+b}2]&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;[\frac{a+b}2,b]&amp;lt;/math&amp;gt;, задав погрешность интегрирования на каждом из отрезков &amp;lt;math&amp;gt;\frac{\varepsilon}2&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в качестве квадратурной формулы выбрать формулу Симпсона, то &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt; можно положить равным &amp;lt;math&amp;gt;\frac{|Q(a,c) + Q(c,b) - Q(a,b)|}{15}&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt; Lyness J. N. Notes on the adaptive Simpson quadrature routine //Journal of the ACM (JACM). – 1969. – Т. 16. – №. 3. – С. 483-495.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Valkyrie</name></author>
	</entry>
</feed>