A versão mais recente do pacote CHOLMOD SuiteSparse (beta 4.4.5) suporta a modificação de uma linha / coluna simétrica (atualização do rank2) para decomposição L D LT , usando uma API matlab (e C). Eu usei com sucesso em um dos meus projetos.
Você pode usá-lo para fazer atualizações n n z( G ) na fatoração. É baseado neste artigo.
Portanto, a complexidade será O (n n z( G ) ∗ n n z( L ) ) . Onde n nz( L ) pode ser reduzido significativamente ao usar uma permutação de redução de preenchimento para um A esparsoUMA
O pacote pode ser baixado aqui
Abaixo estão algumas notas que o proprietário do pacote deu (Prof. Tim Davis):
API:
LD = ldlrowmod (LD, k) exclui a linha / coluna k, configurando A (:, k) e A (k, :) para a quinta linha / coluna de identidade.
LD = ldlrowmod (LD, k, C) substitui a enésima linha / coluna de A (que deve ser a enésima linha / coluna de identidade) pela coluna esparsa C.
Complexidade:
A linha adicionar / excluir demora no máximo O ( n n z( L ) ) , portanto, se n n z( L ) é O ( n ) , então o tempo é no máximo O ( n ) .
Permutação de redução de preenchimento:
L D LTL D LTPA PTeu