Minha pergunta é simples:
Qual é o pior caso de tempo da melhor algoritmo conhecido correndo para computar uma eigendecomposition de um matriz?
A composição automática reduz à multiplicação de matrizes ou os algoritmos mais conhecidos (via SVD ) no pior caso?
Observe que estou solicitando uma análise de pior caso (apenas em termos de ), não limites com constantes dependentes de problemas, como número da condição.
EDIT : Dadas algumas das respostas abaixo, deixe-me ajustar a pergunta: eu ficaria feliz com uma aproximação . A aproximação pode ser multiplicativa, aditiva, entrada ou qualquer definição razoável que você queira. Estou interessado se existe um algoritmo conhecido que tem melhor dependência de que algo como ?
EDIT 2 : Veja esta pergunta relacionada sobre matrizes simétricas .
Respostas:
Ryan respondeu a uma pergunta semelhante no mathoverflow. Aqui está o link: mathoverflow-answer
Basicamente, você pode reduzir a computação do valor próprio à multiplicação de matrizes calculando um determinante simbólico. Isso fornece um tempo de execução de O ( ) para obter bits dos valores próprios; o tempo de execução mais conhecido atualmente é O ( ) para uma aproximação dentro de .nω+1m m n3+n2log2nlogb 2−b
A referência de Ryan é `` Victor Y. Pan, Zhao Q. Chen: A complexidade do problema de matriz própria. STOC 1999: 507-516 ''.
(Acredito que há também uma discussão sobre a relação entre as complexidades dos autovalores e a multiplicação de matrizes no livro mais antigo de Aho, Hopcroft e Ullman `` The Design and Analysis of Computer Algorithms '', no entanto, não tenho o livro em na minha frente e não posso fornecer o número exato da página.)
fonte
Encontrar valores próprios é inerentemente um processo iterativo: encontrar valores próprios é equivalente a encontrar as raízes de um polinômio. Além disso, o teorema de Abel-Ruffini afirma que, em geral, você não pode expressar as raízes de um polinômio arbitrário de uma forma simples e fechada (ou seja, com radicais como a fórmula quadrática). Portanto, você não pode esperar calcular valores próprios "exatamente".
Isso significa que um algoritmo de decomposição espectral deve ser aproximado. O tempo de execução de qualquer algoritmo geral deve depender da precisão desejada; não pode depender apenas da dimensão.
Eu não sou especialista nisso. Eu acho que uma dependência cúbica de n é muito boa. Os algoritmos que eu já vi usam multiplicação de matriz-vetor, em vez de multiplicação de matriz-matriz. Então, eu ficaria um pouco surpreso se tudo se resumisse à multiplicação matriz-matriz.
Dê uma olhada em http://en.wikipedia.org/wiki/List_of_numerical_analysis_topics#Eigenvalue_algorithms
fonte
Darei apenas uma resposta parcial relativa aos autovalores de uma matriz.
Como mencionado anteriormente, existem muitos métodos iterativos para encontrar os autovalores de uma matriz (por exemplo, iteração de potência), mas, em geral, encontrar os autovalores reduz a busca das raízes do polinômio característico. A localização do polinômio característico pode ser feita em , onde é o custo de bits multiplicado e é o tamanho de bit da entrada máxima, por um cálculo determinante simbólico usando o algoritmo de Bareiss . Veja o livro de Yap sobre "Fundamentos da Álgebra Algorítmica" , especificamente, cap. 10, "Sistemas Lineares" .O(n3MB[n(logn+L)]) MB(s) s L
Uma vez que o polinômio característico é encontrado, é possível encontrar as raízes com qualquer grau de precisão desejado, usando intervalos de isolamento. Veja o livro de Yap, cap. 6 "Raízes de polinômios" para obter detalhes. Eu esqueço o tempo de execução exato, mas seu polinômio no grau do polinômio característico e nos dígitos de precisão desejados.
Suspeito que o cálculo de autovetores até qualquer grau de precisão também seja polinomial, mas não vejo um algoritmo direto. Obviamente, existem os truques padrão mencionados anteriormente, mas até onde eu sei, nenhum deles garante tempo de execução polinomial para a precisão desejada.
fonte
Você pode conferir o novo artigo de Commandur e Kale, que fornece um algoritmo combinatório para o Max-Cut. Parece (a partir de uma leitura superficial) que seu algoritmo é baseado em encontrar combinatorialmente o vetor próprio correspondente ao valor próprio máximo e, em seguida, usar o algoritmo de Luca Trevisan depois que eles tiverem esse vetor próprio.
Parece que eles estão usando uma abordagem alternativa ao algoritmo de Lanczos para encontrar um vetor próprio, por isso pode ser interessante. Não sei qual é a alegada complexidade do método deles para encontrar o vetor próprio, mas pode valer a pena investigar. Além disso, como é a razão de aproximação e não o tempo em si em que eles estão interessados, o tempo limite que eles derem pode não ser o ideal.
fonte
Esta é uma pergunta antiga, mas alguma literatura importante parece ter sido perdida.
Existem algoritmos para os quais temos um suporte teórico mais forte. Por exemplo, existem iterações baseadas na função de sinal da matriz, consulte, por exemplo, "Álgebra Linear Rápida é Estável" por Demmel, Dumitriu e Holtz . Nesse artigo, é mostrado que o problema de autovalor pode ser resolvido no tempo , onde é o expoente da multiplicação de matrizes e é qualquer número .(Oω+η) ω η >0
Sim, existe o artigo Pan + Chen + Zheng que sugere a montagem do polinômio e cálculo característicos no BigFloat porque você perde muita precisão no final, mas poucas pessoas consideram essa uma abordagem prática.
Menciono também que o algoritmo mais utilizado, a iteração Francis QR, não tem prova de convergência para matrizes gerais; o livro de Kressner discute vários contra-exemplos.
fonte
Sim, praticamente toda a álgebra linear numérica pode ser reduzida à multiplicação de matrizes, embora, como sempre, a estabilidade numérica seja um problema. Além disso, com problemas como composição automática, você deve se contentar com uma aproximação, pois a solução pode ser irracional. Confira o livro Polynomial and Matrix Computations de Bini e Pan.
Aqui está outra referência - Álgebra Linear Rápida é Estável http://www.netlib.org/lapack/lawnspdf/lawn186.pdf
fonte