O Que É Condicionamento - O que é o CONDICIONAMENTO CLÁSSICO em 7 EXEMPLOS práticos
O que é o CONDICIONAMENTO CLÁSSICO em 7 EXEMPLOS práticos

O que é condicionamento em álgebra linear e computação numérica

Condicionamento mede quão sensível a saída de um problema matemático é a pequenas perturbações na entrada. Quando você resolve Ax = b e a matriz A tem condition number alto, qualquer erro de arredondamento ou ruído em b pode fazer x mudar drasticamente. Isso não é um bug do seu código. É uma propriedade intrínseca do problema. O condition number de uma matriz é definido como (A) = ||A|| · ||A¹||, usando alguma norma matricial compatível. Na prática, a norma 2 é a mais usada, e nesse caso (A) é a razão entre o maior e o menor valor singular. Se o menor valor singular for próximo de zero, a matriz está próxima de ser singular e o condicionamento explode.

O que é condicionamento na prática

A definição formal é simples. O problema real está em reconhecer quando algo tem condicionamento ruim antes que ele estrague seus resultados. Uma matriz com condicão de 10³ geralmente é aceitável para aritmética de ponto flutuante duplo. Acima de 10, você começa a perder casas decimais significativas de forma mensurável. Em problemas mal condicionados, o que você obtém pode ser numericamente válido mas completamente errado no mundo real, porque o problema em si é instável. Um exemplo concreto que encontrei: estava resolvendo um sistema linear derivado de um ajuste por mínimos quadrados com dados simulados. O condition number da matriz normal AA era da ordem de 10¹². A solução que eu via no resolvente direto (lu() ou um solver direto) parecia razoável visualmente, mas quando substituí de volta em Ax = b, o resíduo aumentava para algo na casa de 10² em vez de 10¹². A matriz não era singular, mas estava tão próxima disso que o formato de número duplo simplesmente não tinha bits suficientes para representar a solução com precisão. A solução foi usar qr() em vez de formar explicitamente AA. A fatoração QR é numericamente mais estável porque não eleva o condition number ao quadrado — AA tem condition number (A)², então um problema já difícil vira intratável nessa transformação.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Como diagnosticar e lidar com condicionamento ruim

O primeiro passo é medir. Em Python com NumPy/SciPy, scipy.linalg.cond(A) ou numpy.linalg.cond(A) retornam o condition number na norma especificada. No MATLAB, cond(A) faz o mesmo. Se você estiver em R, kappa() no pacote base dá valores para matrizes densas e esparsas. Depois de saber o número, a decisão é prática. As opções comuns são:

Erros comuns que pessoas iniciantes cometem

O erro mais frequente é confundir mal condicionamento com singularidade. Uma matriz pode ser tecnicamente invertível mas ter condition number tão alto que a inversão numérica produza resultados sem sentido. Verificar se det(A) 0 não adianta nada — determinantes são escalares que não capturam a sensibilidade do sistema. Outro erro é confiar em um único método de resolução. Um solver direto pode falhar silenciosamente em uma matriz mal condicionada enquanto um solver iterativo como gmres(), com um preconditioner adequado, convergiria sem problema se configurado corretamente. Também é importante notar que condition number alto nem sempre significa que seu problema é impossível. Significa que o problema é sensível. Se seus dados de entrada têm incerteza inerente de 1%, um condition number de 10 permite que o erro na saída seja amplificado para até 10% — basicamente aleatório. Nesse cenário, nenhuma técnica numérica vai resolver; você precisa reformular o modelo ou coletar dados melhores.

Quando o condicionamento não é o problema

Às vezes você vê um solver falhar e culpa o condicionamento, mas a causa real é outra: matriz esparsa mal estruturada que gera fill-in excessivo no fatorador direto, pivotamento numérico defeituoso em um algoritmo personalizado, ou simplesmente um problema mal posto que exige regularização não por condicionamento mas por falta de informação. Antes de partir para técnicas de estabilização numérica, verifique se o problema está bem formulado. Um condition number baixo em um problema mal posto não resolve nada. O campo de análise numérica tem literatura extensa sobre isso. O clássico "Accuracy and Stability of Numerical Algorithms" do Higham cobre o tema com profundidade. Para implementação prática, a documentação do SciPy e do suiteSparse (para matrizes esparsas) oferece guias concretos de escolha de solver dependendo da estrutura da matriz.