Use o botão abaixo para reportar erros ou dar sugestões.

Cálculo Numérico - Versão Python

10.15 Validação e “Benchmarking”


Toda metodologia numérica deve ser validada ao ser aplicada para resolver um problema. A validação aumenta a confiabilidade na qualidade dos resultados obtidos. A validação procura detectar erros de implementação, características numéricas espúrias não prevista em projeto, como propagação catastrófica erros de arrendodamento, inadequação do método para o problema proposto etc. A principal técnica de validação consiste em comparar a solução produzida com soluções de alta qualidade e confiabilidade, os chamados benchmarks. Quando um benchmark não estiver disponível, ainda se dispõe de algumas técnicas para avaliar a qualidade do método. Existe uma hierarquia das técnicas de validação conforme listados a seguir:

1.
Expressão analítica: Testar o código com problemas que admitem soluções analíticas constitui a forma mais confiável para validar o esquema usado. Expressões analíticas são expressões matemáticas das seguintes formas:

  Expressão aritmética: Expressões envolvendo apenas um número finito de operações aritméticas elementares (soma, subtração, multiplicação e divisão) e números inteiros. Ex: u(t) = t2+1 3t-4 ou u(t) = t3 + 3 4.

  Expressão algébrica: Expressões envolvendo apenas um número finito de operações aritméticas elementares e expoentes fracionários. Ex: u(t) = t2 + t ou u(t) = t32 + 2.

  Expressão forma-fechada: Expressões envolvendo apenas um número finito de operações aritméticas elementares, expoentes reais, logaritmos, exponencias, funções trigonométricas e funções trigonométricas inversas. Ex: u(t) = ln(1 + tπ), u(t) = e-t sen (t) ou u(t) = tan -1(t + 1).

  Expressão envolvendo funções especiais: Além das operações e funções acima, são permitidas funções especiais, como a função gama, funções de Bessel, séries de taylor, series de Fourier e outras séries envolvendo funções elementares e especiais.

2.
Expressão matemática semi-analítica: Expressão matemática envolvendo, além das operações e funções acima, outros processos de limite, como derivação e integração. Ex: u(t) =01 log |t - x|xtdx.
3.
Solução numérica com reformulação analítica prévia: Neste caso, não se dispõe de uma expressão matemática para a solução, mas pode-se comparar resultado produzido pelo método numérico com outro problema numérico cuja solução é a mesma e pode ser obtida por outra metodologia numérica mais confiável.
4.
Benchmark puramente numérico: Um benchmark puramente numérico é uma aproximação numérica para a solução de um problema muito bem estabelecida e de alta confiabilidade. Os benchmarks numéricos normalmente são produzidos comparando diversos métodos numéricos diferentes e independentes e com grande refinamento.
5.
Validação por comparação: Quando não se dispõe de benchmarks, ainda se pode comparar o resultado obtido com outros métodos numéricos. Em caso de divergência, pode ser bastante difícil dissernir qual método produz melhores resultados.
6.
Convergência numérica: Este é o teste mais rudimentar que se aplica a métodos e numéricos e consiste em comparar o resultados produzidos com diferentes malhas de cálculo diferentes. Espera-se que o refino da malha produza soluções que convergem para a soluçao exata. Resultados muito próximos entre refinos sugere qualidade nos resultados.

Exemplo 10.15.1 (Expressão analítica). A solução do problema de valor inicial estudado no Exercício Resolvido 10.2.1 dado por: u(t) = -0,5u(t) + 2 + t, (10.372) u(0) = 8, (10.373)

admite uma solução em forma de expressão analítica dada por:

u(t) = 2t + 8e-t2. (10.374)

Exemplo 10.15.2 (Expressão envolvendo funções especiais). A solução do problema de valor inicial dado por: u(t) = -u3(t) + u2(t) (10.375) u(0) = 1 2 (10.376)

é dada na forma: u(t) = 1 1 + W(e1-t) (10.377)

onde W é a função de Lambert é a função inversa de f(y) = yey, onde y = W(x).

Exemplo 10.15.3 (Expressão matemática semi-analítica). A solução do problema de valor inicial dado por: u(5) + au(4) + bu(t) + cu(t) + du(t) + u(t) = 1 (10.378) u(4)(0) = u(0) = u(0) = u(0) = u(0) (10.379)

é dada na forma: u(t) = 1 + Aer1t + Ber2t + Cer3t + Der4t + Eer5t (10.380)

onde r1, r2, r3, r4 e r5 são as raízes do polinômio característico

p(x) = x5 + ax4 + bx3 + cx2 + dx + 1, (10.381)

cujas raízes, salvo casos particulares, só pode ser obtida por aproximações numéricas.

Exemplo 10.15.4 (Solução numérica com reformulação analítica prévia). A solução do problema de valor inicial dado por: u(t) = u3(t) + u2(t) + u(t) + 1 (10.382) u(0) = 0 (10.383)

é dada na forma: ln u(t) + 1 2 u(t)2 + 1 + 2 arctan u t = 4t (10.384)

Esta analítica estabelece uma relação funcional implícita entre t e u(t), no entanto, é necessário resolver uma equação algébrica não-linear para cada t. Ainda assim, pode ser um excelente benchmark, pois o valor de u(t) é dado explicitamente em função de t, isto é, podemos ver t como uma função de u. Por exemplo, é fácil descobrir que u = 1 quando t = ln(2) 4 + π 8 0.5659858768387104. Além disso tomando o limite u +, descobrimos que u(t) tende a infinito quando t π 4 -.

Exemplo 10.15.5 (Solução numérica com reformulação analítica prévia). A solução do problema de valor inicial dado por: u(t) = cos u(t) + u(t) (1 + cos(t)) (10.385) u(0) = 0 (10.386)

é dada na forma: 0y(t) dτ cos(τ) + τ = t + sen (t) (10.387)

Esta expressão reformula o problema como uma equação integral em y(t). Esta nova reformulação pode ser bastante útil para produzir resultados de benchmark se fixamos o forma de y(t), usamos uma técnica de quadratura númerica de boa qualidade para aproximar a integral do lado esquerdo da equação. Por exemplo, escolhendo t(y) = 100, temos: 0100 dτ cos(τ) + τ = 5,574304717298400 (10.388)

Resolvendo a equação algébrica

t + sen (t) = 5,574304717298400, (10.389)

obtemos:

t = 5,924938036503083. (10.390)

A tabela a seguir mostra os valores de y(t) para t = 5,924938036503083 obtidos por quatro métodos de quarta-ordem: Runge-Kutta clássico, Adams-Bashforth, preditor-corretor com Adams-Bashforth quarta ordem e Adams-Moulton quarta ordem e Adams-Moulton. Os últimos três métodos foram inicializados com Runge-Kutta clássico de quarta ordem.






h = 10-1 h = 10-2 h = 10-3 h = 10-4





Runge-Kutta 4 95,02737096 99,04376734 99,81705606 99,9925711





Adams-Bashforth 4 94,68537569 99,04349066 99,81705572 99,9925711





Pred. Corr. 4 94,68537569 99,04349066 99,81705572 99,9925711





Adams-Moulton 4 94,71724913 99,04324261 99,81705570 99,9925711





Para h = 10-6, todos os quatro métodos produzem o resultado 99,99999287.

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 15/5/2019 às 15:24:50.

Informe erros ou edite você mesmo!