Аппроксимируйте минимальную перестановку степени
P = amd(A)
P = amd(A,opts)
P = amd(A)
возвращает аппроксимированный минимальный вектор перестановки степени для разреженной матрицы C = A + A'
. Факторизация Холесского C(P,P)
или A(P,P)
имеет тенденцию быть более разреженной, чем тот из C
или A
. Функция amd
имеет тенденцию быть быстрее, чем symamd
, и также имеет тенденцию возвращать лучшие упорядоченные расположения, чем symamd
. Матричный A
должен быть квадратным. Если A
является полной матрицей, то amd(A)
эквивалентен amd(sparse(A))
.
P = amd(A,opts)
позволяет дополнительные опции для переупорядочения. Вход opts
является структурой с этими двумя полями, показанными ниже. Только необходимо установить интересующие области:
плотный — неотрицательное скалярное значение, которое указывает на то, что считается плотным. Если A n на n, то строки и столбцы с больше, чем записями max(16,(dense*sqrt(n)))
в A + A'
считаются "плотными" и проигнорированы во время упорядоченного расположения. MATLAB помещает эти строки и столбцы в последний раз в выходную перестановку. Значение по умолчанию для этого поля 10.0, если эта опция не присутствует.
агрессивный — скалярное значение, управляющее агрессивным поглощением. Если это поле установлено в ненулевое значение, то агрессивное поглощение выполняется. Это - значение по умолчанию, если эта опция не присутствует.
Программное обеспечение MATLAB выполняет поступорядоченное расположение дерева блока, которое обычно является тем же самым как поступорядоченным расположением дерева устранения. Это не всегда идентично из-за аппроксимированного обновления степени, используемого, и потому что “плотные” строки и столбцы не принимают участие в постпорядке. Оно подходящий для последующей операции chol
, однако, Если вы требуете точного поступорядоченного расположения дерева устранения, можно использовать следующий код:
P = amd(S); C = spones(S)+spones(S'); [ignore, Q] = etree(C(P,P)); P = P(Q);
Если S
уже симметричен, не используйте вторую строку, C = spones(S)+spones(S')
.