Autovalores de pequenas matrizes


8

Estou escrevendo uma pequena biblioteca numérica para matrizes 2x2, 3x3 e 4x4 (real, assimétrica).

Muitos textos de análise numérica são altamente recomendados contra o cálculo das raízes do polinômio característico e recomendam o uso do algoritmo QR com deslocamento duplo. No entanto, o tamanho das matrizes me faz questionar se simplesmente calcular o polinômio característico e encontrar as raízes pode ser suficiente para isso. Encontrei esta resposta no StackExchange que suporta isso, mas sei que erros nos coeficientes polinomiais podem produzir zeros imprecisos do polinômio (e, portanto, valores próprios diferentes). Por outro lado, a equação é apenas quártica e, na melhor das hipóteses, temos fórmulas analíticas para as raízes polinomiais, portanto não devemos nos afastar muito.

Quais são os prós e os contras de usar o polinômio característico para obter valores próprios especificamente para este caso?

Respostas:


12

A primeira coisa a notar é que a correspondência entre encontrar raízes de um polinômio ( qualquer polinômio) e encontrar os valores próprios de uma matriz arbitrária é realmente direto, e é um assunto rico, ver Pseudozeros de polinômios e pseudospectra de matrizes companheiro por Toh e Trefethen e as referências lá.

Δ

x1=bsign(b)Δ2a,x2=c/(ax1),Δ=det(b2a2cb)
Δb24ac

Não existe esse equivalente direto, mesmo para polinômios cúbicos. ( Edit: veja o link para o método de Kahan abaixo no comentário do CADJunkie. Isso pode estar errado. ) A fórmula direta nem sempre é numericamente estável (ao contrário do que você pensa, eu acho), e não pode ser numericamente estável da mesma maneira maneira como a fórmula quadrática, inserindo os sinais certos em algum lugar. Você pode tentar avaliá-lo com precisão extra, por exemplo, com aritmética de dupla origem. Mas as abordagens que funcionam diretamente no polinômio são bastante complicadas. Por exemplo ( https://doi.org/10.1145/2699468 , que também funciona em polinômios quáticos), você pode usar o método de Newton com um bom palpite pré-computado, mas fica realmente um pouco complicado, e a aceleração não é tão grande .

As fórmulas explícitas para polinômios de grau 4 nem sempre são numericamente estáveis. Os polinômios mais difíceis tendem a ter raízes incomuns (pequenas ou próximas umas das outras, diferindo muito em magnitude), mas até mesmo testar seu código em alguns bilhões de polinômios puramente aleatórios geralmente pode revelar erros numéricos.

Uma coisa curiosa relacionada a isso é que Jenkins-Traub, que é uma boa maneira comum de encontrar raízes polinomiais, é na verdade um algoritmo de autovalor (iteração inversa) disfarçado.

Eu diria que a explicitação das fórmulas é, de certa forma, enganosa: isso o leva a pensar que, porque a fórmula tem uma forma fechada, significa que é de algum modo mais barato / fácil. Eu realmente recomendo que você realmente teste / compare isso em alguns dados de teste. Não precisa ser verdade: determinar as raízes dos polinômios de grau está dentro de um pequeno fator inteiro de dificuldade do problema completo de determinar os valores próprios de uma matriz pequena, e as rotinas da biblioteca padrão para valores próprios são muito mais robustas e bem testado. Portanto, ao reduzir o pequeno problema de valor próprio a um problema de raízes polinomiais de baixo grau, você não está necessariamente simplificando.3

Quais são os prós e os contras de usar o polinômio característico para obter valores próprios especificamente para este caso?

Eu acho que o principal golpe é que essa suposição que você faz:

Por outro lado, a equação é apenas quártica e, na melhor das hipóteses, temos fórmulas analíticas para as raízes polinomiais, portanto, não devemos nos afastar muito.

porque uma fórmula está na forma fechada e analítica, significa que é fácil / barata / precisa, não é necessariamente verdadeira. Pode ser verdade em dados específicos que você possa ter, mas até onde eu sei, não é verdade em geral.

PS: Toda a distinção entre a forma fechada e a não fechada fica realmente complicada com a aritmética do computador: você pode pensar que em uma fórmula cúbica é uma forma fechada, mas tanto quanto a aritmética do computador No entanto, essa é apenas outra função racional aproximada, talvez seja mais rápida, mas não fundamentalmente diferente, da função racional aproximada que define o resultado de um algoritmo de autovalor.cos()


Obrigado pela ótima resposta. A parte sobre autovalores e raízes poli sendo conectada era nova para mim. Vejo que soluções em formato fechado não são necessariamente melhores quando se trata de aritmética de computadores. Eu estava pensando em usar um solucionador de raiz poli quadrática e cúbica que Kahan escreveu sobre ( people.eecs.berkeley.edu/~wkahan/Math128/Cubic.pdf ) e converter o quartic em um cúbico usando a fatoração de Descartes para minhas soluções. Você recomendaria implementar o algoritmo QR ou minha abordagem declarada?
precisa saber é o seguinte

@CADJunkie Isso é legal, obrigado, eu não sabia que Kahan escreveu isso, vou ler isso mais tarde. É difícil recomendar assim, mas a melhor maneira de resolver essas questões é implementar as idéias, testá-las e compará-las e segui-las, isso é muito mais definitivo. É muito difícil prever o desempenho assim, antes de ver os resultados. Mas pelo menos certifique-se de comparar com todos os solucionadores de autovalores da biblioteca padrão.
Kirill

@CADJunkie Com base no que Kahan escreveu, o caso cúbico também pode ser melhor diretamente. Assumindo isso, acho que o que escrevi é bom para quiques e superiores.
Kirill

1

Usar um algoritmo QR é a melhor maneira. Eu acho que é melhor usar um algoritmo mais adequado para a tarefa em questão.

De fato, mesmo que você estivesse tentando calcular as raízes de um polinômio, sem pretender usá-las como os valores próprios de uma matriz, é recomendável criar a Matriz Complementar para esse polinômio e resolver os valores próprios dessa matriz. (ou seja, faça o processo oposto ao que você está considerando.) O processo é extremamente robusto, mas não muito eficiente em termos computacionais. Um algoritmo específico para a tarefa de encontrar raízes polinomiais (por exemplo, Jenkins-Traub, Method of Laguerre, etc.) seria mais eficiente. E mesmo se você usar um desses métodos, ainda pode haver alguns casos em que a formação da Matriz Complementar e a computação de seus autovalores ainda oferecem melhores resultados.

Além disso, como Kirill indicou, não há como tirar proveito das soluções de forma fechada para um polinômio de 3º ou 4º grau. Analisei isso alguns anos atrás antes de escrever uma tradução do algoritmo Jenkins-Traub. Para resultados numéricos, ainda é melhor escrever um algoritmo desde o início como um solucionador discreto e ignorar as soluções de formulário fechado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.