No campo da análise numérica, a estabilidade numérica é uma propriedade altamente desejável dos algoritmos matemáticos. A definição precisa de estabilidade depende do contexto, especialmente em álgebra linear numérica e algoritmos para resolver equações diferenciais ordinárias e parciais por meio de aproximações discretas.
“A estabilidade garante que pequenas alterações nos dados de entrada não causem grandes flutuações no resultado final.”
Na álgebra linear numérica, o interesse principal são as instabilidades que surgem perto de problemas quase singulares, como autovalores muito pequenos ou quase coincidentes. Em algoritmos numéricos para resolução de equações diferenciais, a preocupação é que erros de arredondamento ou pequenas flutuações nos dados iniciais podem levar a grandes desvios entre a resposta final e a solução exata. Alguns algoritmos numéricos podem suavizar pequenas flutuações e erros nos dados de entrada, enquanto outros podem amplificar esses erros. Cálculos que podem ser comprovados como não amplificando erros de aproximação são chamados numericamente estáveis.
Uma tarefa comum na análise numérica é escolher algoritmos que sejam robustos, o que significa que os resultados não variam drasticamente quando os dados de entrada mudam ligeiramente. O fenômeno oposto é a instabilidade algorítmica. Frequentemente, um algoritmo envolve um método de aproximação e, em alguns casos, pode ser demonstrado que o algoritmo se aproximará da solução correta ao usar números reais em vez de números de ponto flutuante. Entretanto, neste caso, não há garantia de que ele convergirá para a solução correta, pois erros de arredondamento ou truncamento em números de ponto flutuante podem ser ampliados, fazendo com que o desvio da solução correta cresça exponencialmente.
Na álgebra linear numérica, o conceito de estabilidade pode ser formalizado de várias maneiras diferentes. As definições comumente usadas de estabilidade para frente, para trás e mista aparecem frequentemente neste campo. Vamos considerar um problema resolvido por um algoritmo numérico, onde a função f mapeia dados x para uma solução y. O resultado do algoritmo y* geralmente se desviará da solução "verdadeira" y. Os principais motivos do erro são erros de arredondamento e erros de truncamento.
“O erro de avanço de um algoritmo é a diferença entre seu resultado e a solução; o erro de retrocesso é o menor Δx tal que f(x + Δx) = y*.”
O erro para a frente é a diferença entre y* e y; o erro para trás é o mínimo Δx tal que f(x + Δx) = y*. Existe uma relação de número de condição entre o erro direto e o erro reverso: o tamanho do erro direto é, no máximo, o produto do número de condição e do erro reverso. Em muitos casos, é mais natural considerar erros relativos. Quando o erro reverso é pequeno para todas as entradas x, chamamos o algoritmo de estável reverso. Claro, "pequeno" é um termo relativo e sua definição dependerá do contexto específico.
Frequentemente, é dada uma definição mais geral de estabilidade numérica, chamada estabilidade híbrida, que combina o erro direto e o erro reverso. Um algoritmo é estável se ele resolve aproximadamente um problema vizinho, ou seja, existe um pequeno Δx tal que f(x + Δx) - y* também é pequeno. Portanto, um algoritmo estável para trás é sempre estável. Com relação à estabilidade avançada, um algoritmo é estável avançada se seu erro avançado dividido pelo número de condição do problema for relativamente pequeno.
Na resolução de equações diferenciais, a estabilidade é definida de forma diferente. Em equações diferenciais ordinárias numéricas, há várias noções de estabilidade numérica, como a estabilidade A. Esses conceitos geralmente estão relacionados a certas noções de estabilidade em sistemas dinâmicos, em particular a estabilidade de Lyapunov. Ao resolver equações rígidas, é muito importante usar um método estável.
"A estabilidade é às vezes alcançada pela introdução da difusão numérica, o que garante que os erros de arredondamento nos cálculos não se acumulem em níveis perigosos."
Um algoritmo para resolver equações diferenciais parciais do tipo evolução linear é considerado estável se a mudança total na solução numérica permanecer limitada à medida que o tamanho do passo se aproxima de zero. O teorema de equivalência de Lax afirma que se um algoritmo for consistente e estável, ele convergirá. Entretanto, para equações diferenciais parciais não lineares, a definição de estabilidade é muito mais complicada porque muitas propriedades em equações não lineares não existem em suas contrapartes lineares.
Calcular a raiz quadrada de 2 (aproximadamente 1,41421) é um problema bem definido. Muitos algoritmos resolvem esse problema começando com uma aproximação inicial x0, como x0 = 1,4, e então calculando continuamente estimativas aprimoradas x1, x2 e assim por diante. Um método típico que pode ser usado é o famoso método babilônico, que tem a fórmula xk+1 = (xk + 2/xk) / 2.
O outro método é chamado de "Método X", e sua fórmula é xk+1 = (xk^2 − 2)² + xk. Algumas iterações de cada método são registradas abaixo da tabela, e vemos que o método babilônico converge rapidamente, independentemente da estimativa inicial, enquanto o método X converge muito lentamente em x0 = 1,4 e diverge estranhamente em x0 = 1,42. Portanto, o método babilônico é considerado numericamente estável, enquanto o método X é numericamente instável.
A estabilidade numérica também é afetada pelo número de dígitos significativos retidos pela máquina. Uma máquina que retém apenas quatro dígitos significativos daria um bom exemplo das consequências que podem resultar de uma perda de significância. Por exemplo, considere as funções equivalentes f(x) e g(x). Ao calcular f(500) e g(500), embora as duas funções sejam iguais, elas produzem resultados completamente diferentes, mostrando como pequenos erros podem levar a grandes variações.
Em resumo, a estabilidade numérica é crucial na análise numérica, pois afeta a precisão e a eficiência com que resolvemos problemas. Entretanto, na sua opinião, que tipo de algoritmo ou método pode permanecer estável sob condições instáveis?