O Número de Condição de uma Matriz
Objetivos de Aprendizagem
- Definir , calculá-lo nas normas 1, 2 e , e lê-lo como o inverso da distância relativa até uma matriz singular.
- Deduzir a cota e enunciar a hipótese necessária quando a própria é perturbada.
- Explicar por que um resíduo minúsculo não significa um erro minúsculo, e ligar os dois por meio de .
- Usar " custa até dígitos" como teto, não como previsão.
- Medir a matriz de Hilbert perdendo dígitos, e distinguir um número de condição ruim de um determinante pequeno ou de uma escala ruim.
Contexto e Motivação
conditioning-and-numerical-stability separa a sensibilidade de um problema da qualidade de um algoritmo. Esta lição põe um número nessa sensibilidade para . O número importa porque solvers como lu-decomposition-and-partial-pivoting e iterative-methods-jacobi-and-gauss-seidel devolvem um vetor sem nenhum comentário. Mais adiante nesta lição, um sistema de Hilbert é resolvido com resíduo relativo de cerca de e erro relativo de . Nada na saída sugere isso, e numpy.linalg.solve não emite aviso. É o número de condição que prevê esse resultado.
Teoria Central
Definição
Para uma matriz quadrada invertível e uma norma induzida,
e quando é singular. Três fatos saem direto. Como , sempre vale . Como , vale para . E na norma 2, , a razão entre o maior e o menor eixo do elipsoide em que transforma a esfera unitária; para uma matriz simétrica definida positiva isso é . O valor depende da norma, em geral pouco: a matriz de Hilbert tem e .
Perturbando o lado direito
Hipóteses. é invertível, , e . Conclusão.
A prova tem duas linhas. Subtraindo, , logo . E dá , isto é, . Multiplique as duas. A igualdade exige as duas desigualdades justas ao mesmo tempo: na direção que mais estica e na direção que mais estica. O Exemplo 1 atinge a cota, então ela não pode ser melhorada em geral.
Perturbando a matriz
Hipóteses. é invertível, e . Conclusão. é invertível, e a solução de satisfaz
A hipótese não é enfeite. O menor que torna singular tem , então é exatamente o inverso da distância relativa até uma matriz singular. Uma perturbação desse tamanho já pode deixar o sistema sem solução, logo nenhuma cota a cobre (Exemplo 2).
Resíduo versus erro
Para um calculado, o resíduo é . Então resolve exatamente o sistema com lado direito , e o primeiro teorema dá
O resíduo mede o erro reverso (backward error) e pode ser calculado. O erro é o erro direto (forward error) e não pode. Uma iteração de iterative-methods-jacobi-and-gauss-seidel que para com resíduo pequeno também paga esse fator.
A eliminação de Gauss com pivoteamento parcial normalmente devolve perto do arredondamento unitário (cerca de em float64, em float32). Como , isso dá , cerca de . A razão não precisa ficar perto de : para com igual ao seu menor vetor singular à direita ela vale , enquanto . Daí a regra de trabalho: com , espere perder até dos cerca de 16 (float64) ou 7 (float32) dígitos significativos. É um teto vindo de uma cota de pior caso, não uma previsão.
A matriz de Hilbert
tem entradas para . É simétrica definida positiva, e sua inversa tem entradas inteiras (scipy.linalg.invhilbert com exact=True as devolve como inteiros). É uma matriz de Gram:
Assim, é o que aparece ao ajustar funções por polinômios na base de monômios em , e seu mau condicionamento diz que são quase linearmente dependentes ali. Esse fio continua em least-squares-curve-fitting. O crescimento conhecido é , um fator que tende a por unidade de , ou cerca de dígito por linha.
Exemplos Resolvidos
Exemplo 1: linhas quase paralelas, e a cota atingida
Tome
Então e , logo . Também . Mudar em , para , dá . A mudança relativa em é e em é , então a amplificação é , metade da cota.
A pior direção é . Com , a aritmética exata dá . Agora , a mudança relativa em é , e a razão entre elas é , exatamente .
Exemplo 2: quando a hipótese sobre falha
Mantenha e e mude só , com frações exatas. Escreva .
textnovo a22 rho solução x mudança rel. cota completa 1a ordem kappa*dA/A 1.00009 0.200 (0.8889, 1.1111) 0.111 0.250 0.200 1.000001 1.980 (-98, 100) 99 não vale 1.980 1 2.000 nenhuma (singular) indefinida não vale 2.000
Com a cota vale com folga. Com a hipótese se foi, o denominador da fórmula fica negativo, e a estimativa de primeira ordem erra por um fator de . A última linha não tem solução nenhuma, porque está fora da imagem da matriz singular.
Exemplo 3: a matriz de Hilbert em tamanho real
Resolva com numpy.linalg.solve em float64. A solução verdadeira é , e é calculado em racionais exatos e depois arredondado, então é tão bom quanto o float64 permite. Os valores de vêm de autovalores com 200 dígitos, e a coluna do resíduo é .
textn kappa_2 resíduo rel. erro rel. dígitos corretos 16 - log10(kappa) 4 1.55e+04 0.00e+00 2.91e-13 12.5 11.8 6 1.50e+07 6.86e-17 9.61e-11 10.0 8.8 8 1.53e+10 3.27e-17 2.75e-07 6.6 5.8 10 1.60e+13 2.83e-17 3.15e-04 3.5 2.8 12 1.71e+16 8.21e-17 2.95e-01 0.5 -0.2 14 1.85e+19 2.06e-17 4.48e+00 -0.7 -3.3 16 2.02e+22 2.42e-17 6.35e+00 -0.8 -6.3
O resíduo fica abaixo de enquanto o erro sobe até e passa disso. Até a regra acompanha o erro, com cerca de um dígito de pessimismo. Depois disso o teto fica alto demais para informar algo: em o erro é , longe de . A razão sobe de em para em , rumo a .
Os mesmos tamanhos quebram as ferramentas que os medem:
textn kappa_2 exato numpy.linalg.cond 12 1.71e+16 1.68e+16 13 5.63e+17 2.50e+18 14 1.85e+19 1.89e+17 16 2.02e+22 4.35e+17
Passado , o calculado é ruído de arredondamento, e a resposta pode errar para qualquer lado. scipy.linalg.solve emite um LinAlgWarning em (com rcond informado de ) e nenhum em ; numpy.linalg.solve não emitiu aviso em nenhum tamanho testado.
Exemplo 4: os dados, sozinhos, causam o estrago
A culpa é do solver? Pegue e já guardados em float64 e resolva em aritmética racional exata, de modo que nenhuma operação arredonde.
textn solução exata dos dados guardados numpy.linalg.solve 8 2.91e-07 2.75e-07 10 2.42e-04 3.15e-04 12 1.43e-01 2.95e-01 14 4.20e+00 4.48e+00
Arredondar , e assim por diante ao guardar a matriz já custa os mesmos dígitos. Isso é condicionamento, não instabilidade. A matriz guardada é mensuravelmente outra: tem menor autovalor verdadeiro , e sua cópia em float64 tem , então nem definida positiva ela é. Para , a distância relativa até a singularidade é , abaixo de .
O mesmo solver, no mesmo tamanho, com uma matriz boa serve de controle: a matriz tridiagonal com na diagonal e ao lado, , tem , e o erro para é .
O float32 acaba antes, como a regra diz: o erro é em , em e em . Como as entradas de Hilbert são conhecidas exatamente, mais dígitos resolvem este caso: com lu_solve do mpmath em 50 dígitos decimais, dá erro relativo na norma 2 entre e , conforme o arredondamento de . Com dados medidos, mais precisão de trabalho não devolve o que os dados nunca tiveram.
Exemplo 5: determinante e escala são outras perguntas
textmatriz det kappa_2 0.1 * I (tamanho 20) 1e-20 1 [[1, 1e8], [0, 1]] 1 1e+16 [[1, 2], [3, 4]] -2 14.9 [[1e10, 2e10], [3, 4]] -2e10 2.5e+10
O determinante escala com o tamanho das entradas; não. As duas últimas linhas são as mesmas equações com a primeira multiplicada por , como acontece quando uma equação é escrita em outra unidade. salta nove ordens, e mesmo assim numpy.linalg.solve não perde nada: em 2000 lados direitos aleatórios, o pior erro relativo foi . Reescalar linhas ou colunas muda , então equilibre antes de lê-lo como veredito.
Equívocos Comuns e Armadilhas
- "Resíduo pequeno significa resposta precisa." Só quando é moderado. No Exemplo 3, tem resíduo e erro de .
- "Determinante pequeno significa mal condicionada." de tamanho 20 tem determinante e . Um determinante unitário pode conviver com .
- " significa perder exatamente dígitos." É um teto de pior caso. A matriz reescalada do Exemplo 5 não perdeu nenhum, e as soluções de Hilbert perderam cerca de um dígito a menos que a regra.
- "Um solver melhor resolve." A aritmética exata sobre os dados guardados foi igualmente ruim (Exemplo 4). As curas usuais são reformular (uma base melhor, como em
least-squares-curve-fitting), reescalar, ou ter dados exatos e mais precisão. - "
condsempre dá o número verdadeiro." Passado cerca de , ele informa ruído (Exemplo 3). - "A cota de vale para qualquer perturbação." Ela exige (Exemplo 2).
Resumo
limita como uma mudança relativa em ou em é amplificada em , a cota é atingida, e para mudanças em ela exige . Na norma 2 ele vale , e seu inverso é a distância relativa até a singularidade. O resíduo mede o erro reverso e só vira erro direto depois de multiplicado por , o que dá o teto de cerca de dígitos perdidos. A matriz de Hilbert, a matriz de Gram dos monômios em , mostra isso por inteiro: cresce quase 34 vezes por linha, deixa cerca de meio dígito, e a aritmética exata sobre os dados guardados não faz melhor. não é o determinante e muda com a escala.