O Número de Condição de uma Matriz

Published on 2026-11-04·v1.0

Objetivos de Aprendizagem

  • Definir κ(A)=∥A∥ ∥A−1∥\kappa(A) = \lVert A\rVert\,\lVert A^{-1}\rVert, calculá-lo nas normas 1, 2 e ∞\infty, e lê-lo como o inverso da distância relativa até uma matriz singular.
  • Deduzir a cota ∥Δx∥/∥x∥≤κ(A) ∥Δb∥/∥b∥\lVert\Delta x\rVert/\lVert x\rVert \le \kappa(A)\,\lVert\Delta b\rVert/\lVert b\rVert e enunciar a hipótese necessária quando a própria AA é perturbada.
  • Explicar por que um resíduo minúsculo não significa um erro minúsculo, e ligar os dois por meio de κ\kappa.
  • Usar "κ≈10t\kappa \approx 10^t custa até tt 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 Ax=bAx = b. 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 12×1212\times12 é resolvido com resíduo relativo de cerca de 10−1610^{-16} e erro relativo de 30%30\%. 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,

κ(A)=∥A∥ ∥A−1∥,\kappa(A) = \lVert A\rVert\,\lVert A^{-1}\rVert,

e κ(A)=∞\kappa(A) = \infty quando AA é singular. Três fatos saem direto. Como 1=∥I∥=∥AA−1∥≤∥A∥ ∥A−1∥1 = \lVert I\rVert = \lVert AA^{-1}\rVert \le \lVert A\rVert\,\lVert A^{-1}\rVert, sempre vale κ(A)≥1\kappa(A)\ge 1. Como (cA)−1=c−1A−1(cA)^{-1} = c^{-1}A^{-1}, vale κ(cA)=κ(A)\kappa(cA) = \kappa(A) para c≠0c \ne 0. E na norma 2, κ2(A)=σmax⁡/σmin⁡\kappa_2(A) = \sigma_{\max}/\sigma_{\min}, a razão entre o maior e o menor eixo do elipsoide em que AA transforma a esfera unitária; para uma matriz simétrica definida positiva isso é λmax⁡/λmin⁡\lambda_{\max}/\lambda_{\min}. O valor depende da norma, em geral pouco: a matriz de Hilbert 8×88\times8 tem κ2=1,53×1010\kappa_2 = 1{,}53\times10^{10} e κ∞=3,39×1010\kappa_\infty = 3{,}39\times10^{10}.

Perturbando o lado direito

Hipóteses. AA é invertível, b≠0b \ne 0, Ax=bAx = b e A(x+Δx)=b+ΔbA(x+\Delta x) = b+\Delta b. Conclusão.

∥Δx∥∥x∥≤κ(A) ∥Δb∥∥b∥.\frac{\lVert\Delta x\rVert}{\lVert x\rVert} \le \kappa(A)\,\frac{\lVert\Delta b\rVert}{\lVert b\rVert}.

A prova tem duas linhas. Subtraindo, A Δx=ΔbA\,\Delta x = \Delta b, logo ∥Δx∥≤∥A−1∥ ∥Δb∥\lVert\Delta x\rVert \le \lVert A^{-1}\rVert\,\lVert\Delta b\rVert. E b=Axb = Ax dá ∥b∥≤∥A∥ ∥x∥\lVert b\rVert \le \lVert A\rVert\,\lVert x\rVert, isto é, 1/∥x∥≤∥A∥/∥b∥1/\lVert x\rVert \le \lVert A\rVert/\lVert b\rVert. Multiplique as duas. A igualdade exige as duas desigualdades justas ao mesmo tempo: xx na direção que AA mais estica e Δb\Delta b na direção que A−1A^{-1} mais estica. O Exemplo 1 atinge a cota, então ela não pode ser melhorada em geral.

Perturbando a matriz

Hipóteses. AA é invertível, b≠0b \ne 0 e ∥A−1∥ ∥ΔA∥<1\lVert A^{-1}\rVert\,\lVert\Delta A\rVert < 1. Conclusão. A+ΔAA+\Delta A é invertível, e a solução de (A+ΔA)(x+Δx)=b+Δb(A+\Delta A)(x+\Delta x) = b+\Delta b satisfaz

∥Δx∥∥x∥≤κ(A)1−κ(A) ∥ΔA∥/∥A∥(∥ΔA∥∥A∥+∥Δb∥∥b∥).\frac{\lVert\Delta x\rVert}{\lVert x\rVert} \le \frac{\kappa(A)}{1-\kappa(A)\,\lVert\Delta A\rVert/\lVert A\rVert}\left(\frac{\lVert\Delta A\rVert}{\lVert A\rVert}+\frac{\lVert\Delta b\rVert}{\lVert b\rVert}\right).

A hipótese não é enfeite. O menor ΔA\Delta A que torna AA singular tem ∥ΔA∥2/∥A∥2=1/κ2(A)\lVert\Delta A\rVert_2/\lVert A\rVert_2 = 1/\kappa_2(A), então κ2\kappa_2 é 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 x^\hat x calculado, o resíduo é r=b−Ax^r = b - A\hat x. Então x^\hat x resolve exatamente o sistema com lado direito b−rb - r, e o primeiro teorema dá

∥x−x^∥∥x∥≤κ(A) ∥r∥∥b∥.\frac{\lVert x-\hat x\rVert}{\lVert x\rVert} \le \kappa(A)\,\frac{\lVert r\rVert}{\lVert b\rVert}.

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 ∥r∥/(∥A∥ ∥x^∥)\lVert r\rVert/(\lVert A\rVert\,\lVert\hat x\rVert) perto do arredondamento unitário uu (cerca de 1,1×10−161{,}1\times10^{-16} em float64, 6,0×10−86{,}0\times10^{-8} em float32). Como x−x^=A−1rx-\hat x = A^{-1}r, isso dá ∥x−x^∥/∥x^∥≤κ(A) ∥r∥/(∥A∥ ∥x^∥)\lVert x-\hat x\rVert/\lVert\hat x\rVert \le \kappa(A)\,\lVert r\rVert/(\lVert A\rVert\,\lVert\hat x\rVert), cerca de κu\kappa u. A razão ∥r∥/∥b∥\lVert r\rVert/\lVert b\rVert não precisa ficar perto de uu: para H12H_{12} com xx igual ao seu menor vetor singular à direita ela vale 0,160{,}16, enquanto ∥r∥/(∥A∥ ∥x^∥)=9,3×10−18\lVert r\rVert/(\lVert A\rVert\,\lVert\hat x\rVert) = 9{,}3\times10^{-18}. Daí a regra de trabalho: com κ≈10t\kappa \approx 10^t, espere perder até tt 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

HnH_n tem entradas 1/(i+j+1)1/(i+j+1) para i,j=0,…,n−1i,j = 0,\ldots,n-1. É simétrica definida positiva, e sua inversa tem entradas inteiras (scipy.linalg.invhilbert com exact=True as devolve como inteiros). É uma matriz de Gram:

(Hn)ij=∫01xixj dx.(H_n)_{ij} = \int_0^1 x^i x^j\, dx.

Assim, HnH_n é o que aparece ao ajustar funções por polinômios na base de monômios em [0,1][0,1], e seu mau condicionamento diz que 1,x,x2,…1, x, x^2, \ldots são quase linearmente dependentes ali. Esse fio continua em least-squares-curve-fitting. O crescimento conhecido é κ2(Hn)=O((1+2)4n/n)\kappa_2(H_n) = O\big((1+\sqrt2)^{4n}/\sqrt n\big), um fator que tende a (1+2)4≈33,97(1+\sqrt2)^4 \approx 33{,}97 por unidade de nn, ou cerca de 1,51{,}5 dígito por linha.

Exemplos Resolvidos

Exemplo 1: linhas quase paralelas, e a cota atingida

Tome

A=(1111,0001),b=(22,0001),x=(11),A−1=(10001−10000−1000010000).A = \begin{pmatrix}1 & 1\\ 1 & 1{,}0001\end{pmatrix},\quad b = \begin{pmatrix}2\\ 2{,}0001\end{pmatrix},\quad x = \begin{pmatrix}1\\ 1\end{pmatrix}, \quad A^{-1} = \begin{pmatrix}10001 & -10000\\ -10000 & 10000\end{pmatrix}.

Então ∥A∥∞=2,0001\lVert A\rVert_\infty = 2{,}0001 e ∥A−1∥∞=20001\lVert A^{-1}\rVert_\infty = 20001, logo κ∞(A)=40004,0001\kappa_\infty(A) = 40004{,}0001. Também κ2(A)=40002,0\kappa_2(A) = 40002{,}0. Mudar b2b_2 em 10−410^{-4}, para 2,00022{,}0002, dá x+Δx=(0,2)x+\Delta x = (0, 2). A mudança relativa em bb é 5,0×10−55{,}0\times10^{-5} e em xx é 11, então a amplificação é 2000120001, metade da cota.

A pior direção é Δb=(δ,−δ)\Delta b = (\delta, -\delta). Com δ=10−6\delta = 10^{-6}, a aritmética exata dá x+Δx=(1,020001; 0,98)x+\Delta x = (1{,}020001;\ 0{,}98). Agora ∥Δx∥∞=0,020001\lVert\Delta x\rVert_\infty = 0{,}020001, a mudança relativa em bb é δ/2,0001\delta/2{,}0001, e a razão entre elas é 40004,000140004{,}0001, exatamente κ∞(A)\kappa_\infty(A).

Exemplo 2: quando a hipótese sobre ΔA\Delta A falha

Mantenha AA e bb e mude só a22a_{22}, com frações exatas. Escreva ρ=∥A−1∥∞∥ΔA∥∞\rho = \lVert A^{-1}\rVert_\infty\lVert\Delta A\rVert_\infty.

text
novo 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 ρ=0,2\rho = 0{,}2 a cota vale com folga. Com ρ=1,98\rho = 1{,}98 a hipótese se foi, o denominador da fórmula fica negativo, e a estimativa de primeira ordem 1,981{,}98 erra por um fator de 5050. A última linha não tem solução nenhuma, porque bb está fora da imagem da matriz singular.

Exemplo 3: a matriz de Hilbert em tamanho real

Resolva Hnx=bH_n x = b com numpy.linalg.solve em float64. A solução verdadeira é x=(1,…,1)x = (1,\ldots,1), e bb é calculado em racionais exatos e depois arredondado, então é tão bom quanto o float64 permite. Os valores de κ2\kappa_2 vêm de autovalores com 200 dígitos, e a coluna do resíduo é ∥r∥2/(∥Hn∥2∥x^∥2)\lVert r\rVert_2/(\lVert H_n\rVert_2\lVert\hat x\rVert_2).

text
n 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 10−1610^{-16} enquanto o erro sobe até 100%100\% e passa disso. Até n=12n=12 a regra acompanha o erro, com cerca de um dígito de pessimismo. Depois disso o teto fica alto demais para informar algo: em n=14n=14 o erro é 4,484{,}48, longe de κu≈2000\kappa u \approx 2000. A razão κ2(Hn+1)/κ2(Hn)\kappa_2(H_{n+1})/\kappa_2(H_n) sobe de 27,227{,}2 em n=2n=2 para 32,832{,}8 em n=11n=11, rumo a 33,9733{,}97.

Os mesmos tamanhos quebram as ferramentas que os medem:

text
n 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 1/u1/u, o σmin⁡\sigma_{\min} calculado é ruído de arredondamento, e a resposta pode errar para qualquer lado. scipy.linalg.solve emite um LinAlgWarning em n=12n=12 (com rcond informado de 2,5×10−172{,}5\times10^{-17}) e nenhum em n=8n=8; numpy.linalg.solve não emitiu aviso em nenhum tamanho testado.

Exemplo 4: os dados, sozinhos, causam o estrago

A culpa é do solver? Pegue HnH_n e bb já guardados em float64 e resolva em aritmética racional exata, de modo que nenhuma operação arredonde.

text
n 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 1/31/3, 1/71/7 e assim por diante ao guardar a matriz já custa os mesmos dígitos. Isso é condicionamento, não instabilidade. A matriz guardada é mensuravelmente outra: H14H_{14} tem menor autovalor verdadeiro 9,9×10−209{,}9\times10^{-20}, e sua cópia em float64 tem −6,3×10−18-6{,}3\times10^{-18}, então nem definida positiva ela é. Para H12H_{12}, a distância relativa até a singularidade é 5,8×10−175{,}8\times10^{-17}, abaixo de uu.

O mesmo solver, no mesmo tamanho, com uma matriz boa serve de controle: a matriz tridiagonal com 22 na diagonal e −1-1 ao lado, n=12n=12, tem κ2=67,8\kappa_2 = 67{,}8, e o erro para x=(1,…,1)x = (1,\ldots,1) é 3,2×10−173{,}2\times10^{-17}.

O float32 acaba antes, como a regra diz: o erro é 2,0×10−52{,}0\times10^{-5} em n=4n=4, 3,25×10−23{,}25\times10^{-2} em n=6n=6 e 3,553{,}55 em n=8n=8. 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, H12H_{12} dá erro relativo na norma 2 entre 2×10−382\times10^{-38} e 7×10−377\times10^{-37}, conforme o arredondamento de bb. 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

text
matriz 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; κ\kappa não. As duas últimas linhas são as mesmas equações com a primeira multiplicada por 101010^{10}, como acontece quando uma equação é escrita em outra unidade. κ\kappa salta nove ordens, e mesmo assim numpy.linalg.solve não perde nada: em 2000 lados direitos aleatórios, o pior erro relativo foi 1,4×10−151{,}4\times10^{-15}. Reescalar linhas ou colunas muda κ\kappa, então equilibre antes de lê-lo como veredito.

Equívocos Comuns e Armadilhas

  • "Resíduo pequeno significa resposta precisa." Só quando κ\kappa é moderado. No Exemplo 3, n=12n=12 tem resíduo 8×10−178\times10^{-17} e erro de 30%30\%.
  • "Determinante pequeno significa mal condicionada." 0,1 I0{,}1\,I de tamanho 20 tem determinante 10−2010^{-20} e κ=1\kappa = 1. Um determinante unitário pode conviver com κ=1016\kappa = 10^{16}.
  • "κ=10t\kappa = 10^{t} significa perder exatamente tt 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.
  • "cond sempre dá o número verdadeiro." Passado cerca de 1/u1/u, ele informa ruído (Exemplo 3).
  • "A cota de ΔA\Delta A vale para qualquer perturbação." Ela exige ∥A−1∥ ∥ΔA∥<1\lVert A^{-1}\rVert\,\lVert\Delta A\rVert < 1 (Exemplo 2).

Resumo

κ(A)=∥A∥ ∥A−1∥\kappa(A) = \lVert A\rVert\,\lVert A^{-1}\rVert limita como uma mudança relativa em bb ou em AA é amplificada em xx, a cota é atingida, e para mudanças em AA ela exige ∥A−1∥ ∥ΔA∥<1\lVert A^{-1}\rVert\,\lVert\Delta A\rVert<1. Na norma 2 ele vale σmax⁡/σmin⁡\sigma_{\max}/\sigma_{\min}, 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 κ\kappa, o que dá o teto de cerca de log⁡10κ\log_{10}\kappa dígitos perdidos. A matriz de Hilbert, a matriz de Gram dos monômios em [0,1][0,1], mostra isso por inteiro: κ2\kappa_2 cresce quase 34 vezes por linha, n=12n=12 deixa cerca de meio dígito, e a aritmética exata sobre os dados guardados não faz melhor. κ\kappa não é o determinante e muda com a escala.

Documentation Links