Existe um algoritmo para criar uma matriz para o º poder em tempo?
Estive pesquisando on-line, mas até agora não obtive êxito.
Existe um algoritmo para criar uma matriz para o º poder em tempo?
Estive pesquisando on-line, mas até agora não obtive êxito.
Respostas:
Aqui está o pseudocódigo para um algoritmo de exponenciação de matriz. Observe que o operador * indica multiplicação de matriz comum.
MATHPOWER (M, n)
if n == 1
then return M
else
P = MATHPOWER (M, floor(n/2))
if n mod 2 == 0
then return P * P
else
return P * P * M
Existem outros dois algoritmos que podem ou não ser relevantes. O primeiro algoritmo diagonaliza sua matriz (o que geralmente é possível), escrevendo-a como, Onde em geral, podem ter valores complexos. Você então calcula. Observe que é muito fácil elevar uma matriz diagonal para opoder th. E senão é diagonalizável, você encontra sua forma Jordan e continua como antes (agora você também precisa calcular alguns coeficientes binomiais). Esse algoritmo provavelmente não é numericamente estável.
Outro algoritmo usa o fato de que satisfaz seu polinômio característico (ou mesmo seu polinômio mínimo). Suponha para alguns , digamos o polinômio característico. Então podemos calcular sobre e substitua . Isso significa que calculamos como um polinômio, usando o fato de que e apenas no final substitua os valores de . Poderíamos até pré-calcular todos os poderes necessários para e todos os valores de para , e esse algoritmo pode ser mais rápido que a resposta de Massimo Cafaro. Pode ser mais numericamente estável que o algoritmo anterior.