exponenta event banner

анализировать

Перестановка вложенного рассечения

Описание

пример

p = dissect(A) возвращает вектор перестановки, вычисленный с использованием вложенного рассечения структуры разреженности A.

пример

p = dissect(A,Name,Value) указывает дополнительные параметры, использующие один или несколько аргументов пары имя-значение. Например, dissect(A,'NumIterations',15) использует 15 итераций уточнения во вложенном алгоритме рассечения вместо 10.

Примеры

свернуть все

Переупорядочить разреженную матрицу с помощью нескольких методов и сравнить заполнение, вызванное разложением LU переупорядоченных матриц.

Загрузить west0479 матрица, которая является вещественно-значимой 479 на 479 разреженной матрицей с вещественными и комплексными парами сопряженных собственных значений. Просмотрите структуру разреженности.

load west0479.mat
A = west0479;
spy(A)

Figure contains an axes. The axes contains an object of type line.

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

p1 = dissect(A);
p2 = amd(A);
p3 = symrcm(A);

Сравнение структур разреженности разложения LU A с использованием различных методов упорядочения. dissect функция создает переупорядочение, которое влечет за собой наименьшее количество заполнения.

subplot(1,2,1)
spy(A)
title('Original Matrix')
subplot(1,2,2)
spy(lu(A))
title('LU Decomposition')

Figure contains 2 axes. Axes 1 with title Original Matrix contains an object of type line. Axes 2 with title LU Decomposition contains an object of type line.

figure
subplot(1,2,1)
spy(A(p3,p3))
title('Reverse Cuthill-McKee')
subplot(1,2,2)
spy(lu(A(p3,p3)))
title('LU Decomposition')

Figure contains 2 axes. Axes 1 with title Reverse Cuthill-McKee contains an object of type line. Axes 2 with title LU Decomposition contains an object of type line.

figure
subplot(1,2,1)
spy(A(p2,p2))
title('Approximate Minimum Degree')
subplot(1,2,2)
spy(lu(A(p2,p2)))
title('LU Decomposition')

Figure contains 2 axes. Axes 1 with title Approximate Minimum Degree contains an object of type line. Axes 2 with title LU Decomposition contains an object of type line.

figure
subplot(1,2,1)
spy(A(p1,p1))
title('Nested Dissection')
subplot(1,2,2)
spy(lu(A(p1,p1)))
title('LU Decomposition')

Figure contains 2 axes. Axes 1 with title Nested Dissection contains an object of type line. Axes 2 with title LU Decomposition contains an object of type line.

Матрица со стрелками - это разреженная матрица, имеющая несколько плотных столбцов. Используйте 'MaxDegreeThreshold' пара имя-значение для фильтрации плотных столбцов до конца переупорядоченной матрицы.

Создайте разреженную матрицу стрелок и просмотрите узор разреженности.

A = speye(100) + diag(ones(1,99),1) + diag(ones(1,98),2);
A(1:5,:) = ones(5,100);
A = A + A';
spy(A)

Figure contains an axes. The axes contains an object of type line.

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

p = dissect(A,'MaxDegreeThreshold',10);

Просмотр шаблона разреженности переупорядоченной матрицы. dissect размещает плотные столбцы в конце переупорядоченной матрицы.

spy(A(p,p))

Figure contains an axes. The axes contains an object of type line.

Входные аргументы

свернуть все

Входная матрица, заданная как квадратная матрица. A может быть полным или разреженным. Если A несимметрично, тогда dissect симметризует его.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Поддержка комплексного номера: Да

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: p = dissect(A,'NumIterations',15,'NumSeparators',2) использует 15 итераций уточнения и 2 сепаратора в алгоритме вложенного рассечения.

Веса вершин, указанные как разделенная запятыми пара, состоящая из 'VertexWeights' и вектор. Вектор весов должен иметь длину, равную size(A,1) чтобы для каждой вершины был задан вес. Используйте эту опцию, чтобы указать, как взвешиваются вершины графа (столбцы матрицы), что влияет на то, как алгоритм вычисляет баланс между секциями.

По умолчанию алгоритм вложенного рассечения одинаково взвешивает все вершины.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Количество разделителей, указанное как разделенная запятыми пара, состоящая из 'NumSeparators' и положительное целое число. Используйте эту опцию, чтобы указать, на какое количество секций разделяется график во время каждого шага разбиения. Увеличение числа разделителей в алгоритме вложенного рассечения может привести к перестановке более высокого качества за счет дополнительного времени выполнения.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Число итераций уточнения, указанное как пара, разделенная запятыми, состоящая из 'NumIterations' и положительное целое число. Большее количество итераций уточнения может привести к перестановке более высокого качества за счет увеличения времени выполнения.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Порог дисбаланса разделения, указанный как пара, разделенная запятыми, состоящая из 'MaxImbalance' и скалярное значение, которое является целым кратным 0.001 больше или равно 1.001 и меньше или равно 1.999. Более высокие пороговые значения могут сократить время выполнения, позволяя алгоритму принять худшую перестановку.

Типы данных: single | double

Порог для степени вершины, указанный как пара, разделенная запятыми, состоящая из 'MaxDegreeThreshold' и неотрицательное целое число. Алгоритм вложенного рассечения игнорирует вершины со степенью, превышающей threshold*(avg degree)/10 во время заказа. dissect помещает вершины, игнорируемые таким образом, в конец перестановки. Это эффективно помещает любые вершины со степенью, превышающей порог, в первый разделитель верхнего уровня. Фильтрация сильно связанных вершин иногда может улучшить скорость и точность упорядочения.

Значение по умолчанию 0 означает, что все вершины упорядочены.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Выходные аргументы

свернуть все

Вектор перестановки, возвращаемый как вектор. Используйте вектор перестановки, чтобы переупорядочить столбцы A использование выражения индексирования A(p,p). Например, факторизация Чолеского chol(A(p,p)) имеет тенденцию быть скуднее, чем у A.

Алгоритмы

Алгоритм упорядочения вложенных рассечений, описанный в [1], представляет собой многоуровневый алгоритм разбиения графов, который используется для получения порядка уменьшения заполнения разреженных матриц. Входная матрица рассматривается как матрица смежности графа. Алгоритм укрупняет граф путем сворачивания вершин и рёбер, переупорядочивает меньший граф, а затем использует шаги уточнения, чтобы отменить укрупнение малого графа и произвести переупорядочение исходного графа.

Пары имя-значение для dissect позволяют управлять различными этапами алгоритма:

  • Огрубление

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

  • Разделение

    После укрупнения графа алгоритм полностью переупорядочивает граф меньшего размера. На каждом шаге разбиения алгоритм пытается разбиить граф на равные части: 'NumSeparators' определяет количество частей для секционирования графика, 'VertexWeights' при необходимости назначает веса вершинам, и 'MaxImbalance' определяет порог для разницы в весе между различными разделами.

  • Обработка

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

Ссылки

[1] Карыпис, Георгий и Випин Кумар. «Многоуровневая схема быстрого и высокого качества для разбиения нерегулярных графиков». Журнал SIAM по научным вычислениям. Том 20, номер 1, 1999, стр. 359-392.

Представлен в R2017b