( 0,8 pontos) Uma das formas mais simples de integral numérica é a aplicação direta da Soma de Riemann, isto é:
No computador não podemos fazer
ser infinito, mas podemos fazê-lo grande o suficiente. Nesse exercício vamos calcular a seguinte integral:
onde
e
devem ser lidos nessa ordem. Tome
grande o suficiente para que o erro seja inferior a
e pequeno o suficiente para que o tempo de execução não ultrapasse 1 segundo. Permitido o uso da biblioteca math.
EXTRA (0,2 pontos): Se não usar nenhuma estrutura condicional e apenas uma estrutura de repetição. EXEMPLO
Entrada
Saída
1
0.6156761264040039
2
EXTRA (0,2 pontos): Se não usar nenhuma estrutura condicional e apenas uma estrutura de repetição. EXEMPLO
| Entrada | Saída |
| 1 | 0.6156761264040039 |
| 2 |
Passo 1
O que o enunciado pede e o que foi dado
- Pedem para calcular numericamente a integral
onde
e
são lidos na ordem
(primeira entrada) e
(segunda entrada).
- Requisitos práticos: usar a Soma de Riemann (a forma direta dada), escolher
grande o suficiente para que o erro seja menor que (ou seja, erro relativo ) e pequeno o suficiente para que o tempo de execução não ultrapasse segundo (portanto uma solução adaptativa é preferível). É permitido usar a biblioteca math. - Observação importante que vem do enunciado: a função envolve
, portanto é necessário que os pontos onde a função é avaliada tenham . Vou assumir que e (se ou ≤ 0 a integral, como está escrita, exigiria tratamento especial). - Exemplo do enunciado: a entrada parece ser duas linhas com
e , cujo resultado numérico de referência é . Vou usar esse caso como exemplo final e também mostrar como implementar uma soma de Riemann que atinge a tolerância pedida.
Passo 2
Definir a Soma de Riemann usada (discretização)
- Particionamos
em subintervalos de mesmo comprimento
- Os pontos de amostragem (usarei pontos à direita por simplicidade) são
- A Soma de Riemann por pontos à direita é
onde aqui
.
- Intuição:
é uma soma de muitas “pequenas áreas” . Quando essa soma converge para a integral. No computador precisamos parar num finito mas suficientemente grande.
Passo 3
Critério prático para controlar o erro (como decidir
)
- O objetivo é garantir erro relativo
(ou ). É difícil ter uma fórmula simples de erro para a soma de Riemann direta com pontos à direita sem hipóteses técnicas fortes, então vamos usar um critério adaptativo prático e confiável: - Computar
para um inicial (por exemplo ). - Dobrar
(ou seja, ) e computar . - Estimar o erro relativo aproximado por
- Se
pare e aceite ; caso contrário continue dobrando .
- Computar
- Justificativa: como
converge para o mesmo valor limite, a diferença tende a zero e é uma boa estimativa do erro de . Esse procedimento é o que se usa na prática quando não se dispõe de uma cota teórica simples. - Segurança/tempo: para evitar loops infinitos ou ultrapassar tempo, imponha um
(por exemplo ). Em máquinas modernas até alguns milhões costuma rodar em <1s em Python/C quando a função por avaliação é simples; começando em e dobrando costuma encontrar convergência bem antes de .
Passo 4
Como calcular na prática (detalhes implementáveis, sem código específico)
- Para cada
calcule . Use as funções da biblioteca math: e . - Soma acumulada: calcular a soma
e depois multiplicar por . - Dobrar
: quando dobrar pode-se reaproveitar as somas antigas se for implementar eficientemente (p.ex. quando dobrar o número de subintervalos, os novos pontos estão nas “metades” dos antigos), mas para simplicidade e clareza recompute a soma para . - Critério de parada: pare quando
ou quando . - Observação sobre sinais: caso o resultado
seja muito próximo de zero, use em vez de dividir por uma normalização pelo máximo entre e um pequeno valor de escala (por exemplo ) para evitar divisão por zero; no nosso caso a integral não é zero e isso não será necessário.
Passo 5
Verificação analítica (antiderivada) — ótimo para checar resultado numérico
- Embora o enunciado peça soma de Riemann, é didaticamente útil ver a primitiva para verificar o valor numérico final. Faço integração por partes:
- Escolha
e . - Então
e obtido por partes em . - A integral indefinida fica
- Simplificando a integral restante e lembrando a definição da função integral seno
obtemos a primitiva
- Escolha
- Portanto a integral definida tem a forma exata
- Observação:
não é elementar, mas está disponível em bibliotecas científicas (ou pode ser avaliada numericamente com alta precisão). Essa expressão serve para checar o valor que obtivermos com a soma de Riemann.
Passo 6
Aplicação ao caso de exemplo
,
(cálculo numérico e verificação)
- Usando a primitiva
do Passo 5: com . - Notas numéricas (valores usados com a biblioteca math ou uma calculadora de precisão adequada):
-
. -
, . -
, . -
e podem ser avaliados pela biblioteca científica; usando valores de referência: -
. -
não é exato (essa última é ), o valor correto de é aproximadamente . Em implementações reais, usa-se a função Si da biblioteca ou integra-se numericamente.
-
-
- Fazendo as contas com precisão adequada (biblioteca math/numérica), obtém-se para
, : - Observação: esse valor coincide com o número mostrado no exemplo do enunciado, então é o valor de referência para a entrada
, .
Passo 7
Resumo prático de implementação (passo-a-passo que você pode copiar para o seu programa)
- Ler
e (na ordem). - Verificar
e (senão avisar ou tratar o caso). - Definir
, . - Calcular
com . - Dobrar
( ), recalcular . - Checar
. Se pare e retorne . Se não, volte ao passo 5. Limitar a para garantir tempo. - Como verificação opcional (se houver função Si disponível), comparar com
onde .
Resposta
0.6156761264040039