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

Участник:Kaholicl/Адаптивный крестовый метод: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Новая страница: «вправравраврп»
 
Нет описания правки
 
Строка 1: Строка 1:
вправравраврп
{{algorithm
| name              = Адаптивный крестовый метод
| serial_complexity = <math>O(k^2(m+n))</math>
| pf_height        = <math>O(k)</math>
| pf_width          = <math>O(m+n)</math>
| input_data        = <math>O(k(m+n))</math>
| output_data      = <math>O(k(m+n))</math>
}}
 
Основные авторы описания: [[Участник:Kaholicl|П.А.Панов]]
 
== Свойства и структура алгоритма ==
 
=== Общее описание алгоритма ===
 
'''Адаптивный крестовый метод''' (Adaptive Cross Approximation, ACA) — это итерационный алгоритм для построения низкоранговой аппроксимации матриц, который не требует вычисления и хранения всех элементов исходной матрицы. Метод был разработан для эффективной работы с матрицами, возникающими при дискретизации интегральных уравнений и в других приложениях вычислительной математики<ref>Bebendorf M. Hierarchical Matrices: A Means to Efficiently Solve Elliptic Boundary Value Problems. — Springer, 2008.</ref>.
 
Основная идея метода заключается в построении аппроксимации матрицы <math>A \in \mathbb{R}^{m \times n}</math> в виде произведения двух матриц меньшей размерности: <math>A \approx U_k V_k^T</math>, где <math>U_k \in \mathbb{R}^{m \times k}</math>, <math>V_k \in \mathbb{R}^{n \times k}</math>, и <math>k \ll \min(m,n)</math>. При этом алгоритм вычисляет только <math>O(k(m+n))</math> элементов исходной матрицы вместо полных <math>O(mn)</math>.
 
=== Математическое описание алгоритма ===
 
Исходные данные: матрица <math>A</math> (заданная неявно, через функцию вычисления элементов), допустимая погрешность <math>\varepsilon</math>, максимальный ранг <math>k_{max}</math>.
 
Вычисляемые данные: матрицы <math>U_k = [u_1, \ldots, u_k]</math> и <math>V_k = [v_1, \ldots, v_k]</math> такие, что <math>A \approx U_k V_k^T</math>.
 
'''Формулы метода:'''
 
'''Инициализация:'''
* <math>j_1 = 1</math> (начальный ведущий столбец)
* <math>k = 1</math>
 
'''Основные итерационные формулы:'''
* <math>
\tilde{u}_k = A_{:,j_k} - \sum_{p=1}^{k-1} u_p (v_p^T)_{j_k}
</math>
* <math>
i_k = \arg\max_{1 \leq i \leq m} |(\tilde{u}_k)_i|
</math>
* <math>
u_k = \frac{\tilde{u}_k}{(\tilde{u}_k)_{i_k}}
</math>
* <math>
\tilde{v}_k^T = A_{i_k,:} - \sum_{p=1}^{k-1} (u_p)_{i_k} v_p^T
</math>
* <math>
v_k = \tilde{v}_k
</math>
* <math>
j_{k+1} = \arg\max_{1 \leq j \leq n} |(\tilde{v}_k)_j|
</math>
 
'''Критерии остановки:'''
* Если <math>\|u_k v_k^T\|_F \leq \varepsilon \|A_k\|_F</math>, где <math>A_k = \sum_{p=1}^k u_p v_p^T</math>
* Или если <math>k = k_{max}</math>
* Иначе: <math>k = k + 1</math>, перейти к следующей итерации
 
'''Вычислительные характеристики:'''
* Сложность одной итерации: <math>O(k(m+n))</math>
* Общая сложность: <math>O(k^2(m+n))</math>
* Объем памяти: <math>O(k(m+n))</math>
* Количество вычисляемых элементов матрицы: <math>O(k(m+n))</math> вместо <math>O(mn)</math>

Текущая версия от 11:52, 3 ноября 2025


Адаптивный крестовый метод
Последовательный алгоритм
Последовательная сложность [math]\displaystyle{ O(k^2(m+n)) }[/math]
Объём входных данных [math]\displaystyle{ O(k(m+n)) }[/math]
Объём выходных данных [math]\displaystyle{ O(k(m+n)) }[/math]
Параллельный алгоритм
Высота ярусно-параллельной формы [math]\displaystyle{ O(k) }[/math]
Ширина ярусно-параллельной формы [math]\displaystyle{ O(m+n) }[/math]


Основные авторы описания: П.А.Панов

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

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

Адаптивный крестовый метод (Adaptive Cross Approximation, ACA) — это итерационный алгоритм для построения низкоранговой аппроксимации матриц, который не требует вычисления и хранения всех элементов исходной матрицы. Метод был разработан для эффективной работы с матрицами, возникающими при дискретизации интегральных уравнений и в других приложениях вычислительной математики[1].

Основная идея метода заключается в построении аппроксимации матрицы [math]\displaystyle{ A \in \mathbb{R}^{m \times n} }[/math] в виде произведения двух матриц меньшей размерности: [math]\displaystyle{ A \approx U_k V_k^T }[/math], где [math]\displaystyle{ U_k \in \mathbb{R}^{m \times k} }[/math], [math]\displaystyle{ V_k \in \mathbb{R}^{n \times k} }[/math], и [math]\displaystyle{ k \ll \min(m,n) }[/math]. При этом алгоритм вычисляет только [math]\displaystyle{ O(k(m+n)) }[/math] элементов исходной матрицы вместо полных [math]\displaystyle{ O(mn) }[/math].

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

Исходные данные: матрица [math]\displaystyle{ A }[/math] (заданная неявно, через функцию вычисления элементов), допустимая погрешность [math]\displaystyle{ \varepsilon }[/math], максимальный ранг [math]\displaystyle{ k_{max} }[/math].

Вычисляемые данные: матрицы [math]\displaystyle{ U_k = [u_1, \ldots, u_k] }[/math] и [math]\displaystyle{ V_k = [v_1, \ldots, v_k] }[/math] такие, что [math]\displaystyle{ A \approx U_k V_k^T }[/math].

Формулы метода:

Инициализация:

  • [math]\displaystyle{ j_1 = 1 }[/math] (начальный ведущий столбец)
  • [math]\displaystyle{ k = 1 }[/math]

Основные итерационные формулы:

  • [math]\displaystyle{ \tilde{u}_k = A_{:,j_k} - \sum_{p=1}^{k-1} u_p (v_p^T)_{j_k} }[/math]
  • [math]\displaystyle{ i_k = \arg\max_{1 \leq i \leq m} |(\tilde{u}_k)_i| }[/math]
  • [math]\displaystyle{ u_k = \frac{\tilde{u}_k}{(\tilde{u}_k)_{i_k}} }[/math]
  • [math]\displaystyle{ \tilde{v}_k^T = A_{i_k,:} - \sum_{p=1}^{k-1} (u_p)_{i_k} v_p^T }[/math]
  • [math]\displaystyle{ v_k = \tilde{v}_k }[/math]
  • [math]\displaystyle{ j_{k+1} = \arg\max_{1 \leq j \leq n} |(\tilde{v}_k)_j| }[/math]

Критерии остановки:

  • Если [math]\displaystyle{ \|u_k v_k^T\|_F \leq \varepsilon \|A_k\|_F }[/math], где [math]\displaystyle{ A_k = \sum_{p=1}^k u_p v_p^T }[/math]
  • Или если [math]\displaystyle{ k = k_{max} }[/math]
  • Иначе: [math]\displaystyle{ k = k + 1 }[/math], перейти к следующей итерации

Вычислительные характеристики:

  • Сложность одной итерации: [math]\displaystyle{ O(k(m+n)) }[/math]
  • Общая сложность: [math]\displaystyle{ O(k^2(m+n)) }[/math]
  • Объем памяти: [math]\displaystyle{ O(k(m+n)) }[/math]
  • Количество вычисляемых элементов матрицы: [math]\displaystyle{ O(k(m+n)) }[/math] вместо [math]\displaystyle{ O(mn) }[/math]
  1. ↑ Bebendorf M. Hierarchical Matrices: A Means to Efficiently Solve Elliptic Boundary Value Problems. — Springer, 2008.