Уровень алгоритма

Участник:Без имени: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 35: Строка 35:
<math>x_i = a + ih, i = 0,1,\dots,n</math>
<math>x_i = a + ih, i = 0,1,\dots,n</math>


Погрешность метода <math>R_n = I - I_h</math> оценивается по формуле:
Метод трапеций имеет второй порядок точности и является точным для многочленов степени не выше первой.
 
=== Вычислительное ядро алгоритма ===
 
Вычислительное ядро метода трапеций представляет собой вычисление суммы значений в узлах сетки:
 
<math> S = f(x_0) + f(x_1) + ... + f(x_n) </math>
 
Где


<math>R_n = -\frac{(b-a)}{12} h^2 f''(\xi), \xi \in [a,b]</math>
<math> f(x) </math> - подынтегральная функция
Или:


<math>|R_n| \leq \frac{(b-a)}{12} h^2 \max_{x \in [a,b]} |f''(x)|</math>
<math> x_i = a+ih </math> - узлы сетки


Метод трапеций имеет второй порядок точности и является точным для многочленов степени не выше первой.
n - количество интервалов разбиения
 
<math>I \approx \frac{h}{2} [f(x_0) + 2\sum_{i=1}^{n-1} f(x_i) + f(x_n)]</math>
 
Основная вычислительная нагрузка приходится на <math>\sum_{i=1}^{n-1} f(x_i)</math>
 
Вычислительное ядро становится особо затратным для сложных функций, где приходится дополнительно вычислять ещё возведение в степень, экспоненту и др. Поэтому сама подынтегральная функция сильно сказывается на сложности.
 
===  Макроструктура алгоритма ===
 
1. Инициализация параметров
 
<source> INIT(a, b, n) → h, sum_initial </source>
 
Вычисление шага сетки: <source> h = (b - a) / n </source>
 
Инициализация суммы: <source> sum_initial = 0.5 * (f(a) + f(b)) </source>
 
2. Вычисление суммы значений функции
 
<source> SUM_FUNCTION_VALUES(a, h, n) -> sum_core </source>
 
Основная вычислительная макрооперация
 
<source>Вычисление: sum_core = ∑[i=1 to n-1] f(a + i·h) </source>
 
3. Финальное вычисление интеграла
 
<source> FINALIZE(sum_initial, sum_core, h) -> integral </source>
 
Объединение результатов: <source> total_sum = sum_initial + sum_core </source>
 
Финальное вычисление: <source> integral = total_sum * h </source>
 
=== Схема реализации последовательного алгоритма ===
 
1. Инициализация параметров интегрирования
 
<source lang="python">
# Входные параметры
a = 0.0      # Нижний предел интегрирования
b = 10.0    # Верхний предел интегрирования 
n = 1000000  # Количество интервалов разбиения
</source>
 
2. Вычисление шага сетки
<source lang="python">
# Входные параметры
h = (b - a) / n 
</source>
 
- Вычисляется равномерное расстояние между соседними узлами
 
- Определяет плотность разбиения области интегрирования
 
3. Инициализация суммы граничных значений
<source lang="python">
integral = 0.5 * (f(a) + f(b))
</source>
 
- Вычисляются значения функции на границах интервала
 
- Умножаются на коэффициент 0.5 согласно формуле трапеций
 
- Создается начальное приближение интеграла
 
4. Основной вычислительный цикл
 
<source lang="python">
for i in range(1, n):
    # Вычисление координаты текущего узла
    x = a + i * h
    # Вычисление значения функции в узле
    fx = f(x)
    # Накопление суммы
    integral += fx
</source>
 
- Для каждого i от 1 до n-1 вычисляется x_i = a + i·h


=== Вычислительное ядро алгоритма ===
- Для каждого узла вычисляется f(x_i). Это наиболее вычислительно затратная часть алгоритма


На вычислительное ядро алгоритма приходится рекурсивное применение формулы трапеций на каждом из разбитых сегментов, пока не достигается требуемая точность.
- Накопление суммы


Вычисление трех интегральных оценок:
5. Финальное вычисление интеграла


<math>I_1 = I_h(f, x_i, x_{i+1})</math> - оценка по формуле трапеций на каждом отрезке
<source lang="python">
result = integral * h
</source>


<math>I_2 = I_h(f, x_i, m) + I_h(f, m, x_{i+1})</math> - сумма оценок на двух половинках, где <math>m = \frac{x_i + x_{i+1}}{2}</math>
Полная схема алгоритма
<source>
НАЧАЛО
  │
  |- Ввод параметров: a, b, n
  │
  |- Проверка: n > 0, a < b
  │
  |- Вычисление: h = (b - a) / n
  │
  |- Инициализация: sum = 0.5 * [f(a) + f(b)]
  │
  |- ЦИКЛ i = 1 ДО n-1:
  │  │
  │  |-Вычисление: x = a + i * h
  │  │
  │  |- Вычисление: fx = f(x)
  │  │
  │  |─ Накопление: sum = sum + fx
  │
  Результат: integral = sum * h
</source>


Оценка погрешности:
===  Последовательная сложность алгоритма ===
<math>\varepsilon = |I_1 - I_2|</math>


Критерий остановки рекурсии:
Метод трапеций относится к классу алгоритмов с линейной сложностью <math> O(n) </math> по количеству интервалов разбиения n. Основной вклад в сложность вносят вычисления функции <math> f(x) </math> именно от неё зависит количество проводимых вычислений в процессе применения формулы трапеций от каждого участка.
Если <math>\varepsilon > |I_1 - I_2|</math>, возвращается <math>I_2</math>
Иначе: рекурсивный вызов для <math>[x_i, m]</math> и <math>[m, x_{i+1}]</math>


Формула трапеций. Суммирование всех значений интегралов с каждого элементарного отрезка:
=== Информационный граф ===
Для отрезка <math>[x_i, x_{i+1}]</math> с <math>h = \frac{x_{i+1} - x_i}{n}</math>:


<math>I_h(f, x_i, x_{i+1}) = h \times [\frac{f(x_i)}{2} + \frac{f(x_{i+1})}{2} + \sum_{k=1}^{n-1} f(x_i + k \times h)]</math>


где суммирование ведется по <math>k = 1,\dots,n-1</math>


== Литература ==
== Литература ==

Версия от 08:14, 6 ноября 2025


Алгоритм параллельного вычисления интеграла с использованием составной формулы трапеций.


Основные авторы описания: Участник: Кузнецова Д. Д.

Свойства и структура алгоритма

Общее описание алгоритма

Метод трапеций является отдельным представителем класса алгоритмов численного интегрирования (приближённого вычисления определённых интегралов), также известных как квадратурные формулы. Алгоритм предназначен для решения задачи нахождения приближённого значения определённого интеграла от функции [math]\displaystyle{ f(x) }[/math] на отрезке [math]\displaystyle{ [a,b] }[/math]: [math]\displaystyle{ I = \int_a^b f(x)dx }[/math]

Математическое описание алгоритма

Требуется найти приближённое значение определённого интеграла от функции [math]\displaystyle{ f(x) }[/math] на отрезке [math]\displaystyle{ [a,b] }[/math]:

[math]\displaystyle{ I = \int_a^b f(x)dx }[/math]

Исходный отрезок [math]\displaystyle{ [a,b] }[/math] разбивается на [math]\displaystyle{ n }[/math] элементарных отрезков с помощью узлов интегрирования [math]\displaystyle{ x_i }[/math], где [math]\displaystyle{ i = 0,1,\dots,n }[/math], таких что:

[math]\displaystyle{ x_0 = a, x_n = b }[/math]

На каждом элементарном отрезке [math]\displaystyle{ [x_i,x_{i+1}] }[/math], где [math]\displaystyle{ i = 0,1,\dots,n-1 }[/math], применяется формула трапеций:

[math]\displaystyle{ \int_{x_i}^{x_{i+1}} f(x)dx \approx \frac{f(x_i) + f(x_{i+1})}{2} h_i }[/math]

Где [math]\displaystyle{ h_i = x_{i+1} - x_i }[/math] – длина элементарного отрезка. Суммируя приближённые значения интегралов по всем элементарным отрезкам, получаем составную формулу трапеций:

[math]\displaystyle{ \int_a^b f(x)dx \approx \sum_{i=0}^{n-1} \frac{f(x_i) + f(x_{i+1})}{2} h_i }[/math]

В частности, когда все элементарные отрезки имеют одинаковую длину ([math]\displaystyle{ h_i = h = \frac{b-a}{n} }[/math]), формула принимает вид:

[math]\displaystyle{ \int_a^b f(x)dx \approx I_h = \frac{h}{2} [f(x_0) + 2\sum_{i=1}^{n-1} f(x_i) + f(x_n)] }[/math]

[math]\displaystyle{ x_i = a + ih, i = 0,1,\dots,n }[/math]

Метод трапеций имеет второй порядок точности и является точным для многочленов степени не выше первой.

Вычислительное ядро алгоритма

Вычислительное ядро метода трапеций представляет собой вычисление суммы значений в узлах сетки:

[math]\displaystyle{ S = f(x_0) + f(x_1) + ... + f(x_n) }[/math]

Где

[math]\displaystyle{ f(x) }[/math] - подынтегральная функция

[math]\displaystyle{ x_i = a+ih }[/math] - узлы сетки

n - количество интервалов разбиения

[math]\displaystyle{ I \approx \frac{h}{2} [f(x_0) + 2\sum_{i=1}^{n-1} f(x_i) + f(x_n)] }[/math]

Основная вычислительная нагрузка приходится на [math]\displaystyle{ \sum_{i=1}^{n-1} f(x_i) }[/math]

Вычислительное ядро становится особо затратным для сложных функций, где приходится дополнительно вычислять ещё возведение в степень, экспоненту и др. Поэтому сама подынтегральная функция сильно сказывается на сложности.

Макроструктура алгоритма

1. Инициализация параметров

 INIT(a, b, n) → h, sum_initial

Вычисление шага сетки:

 h = (b - a) / n

Инициализация суммы:

 sum_initial = 0.5 * (f(a) + f(b))

2. Вычисление суммы значений функции

 SUM_FUNCTION_VALUES(a, h, n) -> sum_core

Основная вычислительная макрооперация

Вычисление: sum_core = ∑[i=1 to n-1] f(a + i·h)

3. Финальное вычисление интеграла

 FINALIZE(sum_initial, sum_core, h) -> integral

Объединение результатов:

 total_sum = sum_initial + sum_core

Финальное вычисление:

 integral = total_sum * h

Схема реализации последовательного алгоритма

1. Инициализация параметров интегрирования

# Входные параметры
a = 0.0      # Нижний предел интегрирования
b = 10.0     # Верхний предел интегрирования  
n = 1000000  # Количество интервалов разбиения

2. Вычисление шага сетки

# Входные параметры
h = (b - a) / n

- Вычисляется равномерное расстояние между соседними узлами

- Определяет плотность разбиения области интегрирования

3. Инициализация суммы граничных значений

integral = 0.5 * (f(a) + f(b))

- Вычисляются значения функции на границах интервала

- Умножаются на коэффициент 0.5 согласно формуле трапеций

- Создается начальное приближение интеграла

4. Основной вычислительный цикл

for i in range(1, n):
    # Вычисление координаты текущего узла
    x = a + i * h
    # Вычисление значения функции в узле
    fx = f(x)
    # Накопление суммы
    integral += fx

- Для каждого i от 1 до n-1 вычисляется x_i = a + i·h

- Для каждого узла вычисляется f(x_i). Это наиболее вычислительно затратная часть алгоритма

- Накопление суммы

5. Финальное вычисление интеграла

result = integral * h

Полная схема алгоритма

НАЧАЛО
  │
  |- Ввод параметров: a, b, n
  │
  |- Проверка: n > 0, a < b
  │
  |- Вычисление: h = (b - a) / n
  │
  |- Инициализация: sum = 0.5 * [f(a) + f(b)]
  │
  |- ЦИКЛ i = 1 ДО n-1:
  │   │
  │   |-Вычисление: x = a + i * h
  │   │
  │   |- Вычисление: fx = f(x)
  │   │
  │   |─ Накопление: sum = sum + fx
  │
   Результат: integral = sum * h

Последовательная сложность алгоритма

Метод трапеций относится к классу алгоритмов с линейной сложностью [math]\displaystyle{ O(n) }[/math] по количеству интервалов разбиения n. Основной вклад в сложность вносят вычисления функции [math]\displaystyle{ f(x) }[/math] именно от неё зависит количество проводимых вычислений в процессе применения формулы трапеций от каждого участка.

Информационный граф

Литература

[1] Самарский А.А., Гулин А.В. Численные методы. М.: Наука, 1989. – 432 с.