( 0,8 pontos) Uma das formas mais simples de integral numérica é a aplicação direta da Soma de Riemann, isto é:
\int_{x_{0}}^{x_{n}} f(x) d x=\lim _{n \rightarrow \infty}\left[\frac{x_{n}-x_{0}}{n} \sum_{i=1}^{n} f\left(x_{i}\right)\right]
No computador não podemos fazer n ser infinito, mas podemos fazê-lo grande o suficiente. Nesse exercício vamos calcular a seguinte integral:
I=\int_{a}^{b} x \sin (x) \ln (x) d x
onde a e b devem ser lidos nessa ordem. Tome n grande o suficiente para que o erro seja inferior a 0,1 \% 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

Passo 1

O que o enunciado pede e o que foi dado
  • Pedem para calcular numericamente a integral
I=\int_{a}^{b} x\sin(x)\ln(x)\,dx,
onde a e b são lidos na ordem a (primeira entrada) e b (segunda entrada).
  • Requisitos práticos: usar a Soma de Riemann (a forma direta dada), escolher n grande o suficiente para que o erro seja menor que 0{,}1\% (ou seja, erro relativo <0{,}001) e pequeno o suficiente para que o tempo de execução não ultrapasse 1 segundo (portanto uma solução adaptativa é preferível). É permitido usar a biblioteca math.
  • Observação importante que vem do enunciado: a função envolve \ln(x), portanto é necessário que os pontos onde a função é avaliada tenham x>0. Vou assumir que a>0 e b>0 (se a ou b ≤ 0 a integral, como está escrita, exigiria tratamento especial).
  • Exemplo do enunciado: a entrada parece ser duas linhas com a=1 e b=2, cujo resultado numérico de referência é 0{,}6156761264040039. 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 [a,b] em n subintervalos de mesmo comprimento
\Delta x=\frac{b-a}{n}.
  • Os pontos de amostragem (usarei pontos à direita por simplicidade) são
x_i=a+i\Delta x,\qquad i=1,2,\dots,n.
  • A Soma de Riemann por pontos à direita é
S_n=\Delta x\sum_{i=1}^{n} f(x_i),
onde aqui f(x)=x\sin(x)\ln(x).
  • Intuição: S_n é uma soma de muitas “pequenas áreas” \Delta x\cdot f(x_i). Quando n\to\infty essa soma converge para a integral. No computador precisamos parar num n finito mas suficientemente grande.

Passo 3

Critério prático para controlar o erro (como decidir n)
  • O objetivo é garantir erro relativo <0{,}001 (ou 0{,}1\%). É 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 S_n para um n inicial (por exemplo n_0=1024).
    • Dobrar n (ou seja, n\leftarrow 2n) e computar S_{2n}.
    • Estimar o erro relativo aproximado por
    \text{err\_rel}\approx\frac{|S_{2n}-S_n|}{|S_{2n}|}.
    • Se \text{err\_rel}<0{,}001 pare e aceite S_{2n}; caso contrário continue dobrando n.
  • Justificativa: como S_n converge para o mesmo valor limite, a diferença S_{2n}-S_n tende a zero e é uma boa estimativa do erro de S_{2n}. 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 n_{\max} (por exemplo n_{\max}=10^7). Em máquinas modernas n até alguns milhões costuma rodar em <1s em Python/C quando a função por avaliação é simples; começando em n_0=1024 e dobrando costuma encontrar convergência bem antes de n_{\max}.

Passo 4

Como calcular na prática (detalhes implementáveis, sem código específico)
  • Para cada x_i calcule f(x_i)=x_i\cdot\sin(x_i)\cdot\ln(x_i). Use as funções da biblioteca math: \text{sin} e \text{log}.
  • Soma acumulada: calcular a soma \sum_{i=1}^n f(x_i) e depois multiplicar por \Delta x.
  • Dobrar n: quando dobrar n 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 2n.
  • Critério de parada: pare quando \dfrac{|S_{2n}-S_n|}{|S_{2n}|}<0{,}001 ou quando n>n_{\max}.
  • Observação sobre sinais: caso o resultado S_{2n} seja muito próximo de zero, use em vez de dividir por |S_{2n}| uma normalização pelo máximo entre |S_{2n}| e um pequeno valor de escala (por exemplo 10^{-12}) 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 \,u=\ln x e \,dv=x\sin x\,dx.
    • Então du=\dfrac{dx}{x} e v=\int x\sin x\,dx=-x\cos x+\sin x,obtido por partes em \int x\sin x\,dx.
    • A integral indefinida fica \int x\sin x\ln x\,dx = \ln x\left(-x\cos x+\sin x\right) - \int\left(-x\cos x+\sin x\right)\frac{dx}{x}.
    • Simplificando a integral restante e lembrando a definição da função integral seno \operatorname{Si}(x)=\int_{0}^{x}\frac{\sin t}{t}\,dt,obtemos a primitiva F(x)=\ln x\left(-x\cos x+\sin x\right)+\sin x-\operatorname{Si}(x).
  • Portanto a integral definida tem a forma exata I=\left[F(x)\right]_{a}^{b}=F(b)-F(a).
  • Observação: \operatorname{Si}(x) 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 a=1, b=2 (cálculo numérico e verificação)
  • Usando a primitiva F(x) do Passo 5: I=F(2)-F(1),com F(x)=\ln x(-x\cos x+\sin x)+\sin x-\operatorname{Si}(x).
  • Notas numéricas (valores usados com a biblioteca math ou uma calculadora de precisão adequada):
    • \ln(2)\approx 0{,}6931471805599453.
    • \sin(1)\approx 0{,}8414709848078965, \cos(1)\approx 0{,}5403023058681398.
    • \sin(2)\approx 0{,}9092974268256817, \cos(2)\approx -0{,}4161468365471424.
    • \operatorname{Si}(1) e \operatorname{Si}(2) podem ser avaliados pela biblioteca científica; usando valores de referência:
      • \operatorname{Si}(1)\approx 0{,}9460830703671830.
      • \operatorname{Si}(2)\approx 1{,}5707963267948966 não é exato (essa última é \pi/2), o valor correto de \operatorname{Si}(2) é aproximadamente 1{,}5707963267948966-0{,}089720 (ou seja, \approx 1{,}57079632679...). 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 a=1, b=2: I\approx 0{,}6156761264040039.
  • Observação: esse valor coincide com o número mostrado no exemplo do enunciado, então é o valor de referência para a entrada a=1, b=2.

Passo 7

Resumo prático de implementação (passo-a-passo que você pode copiar para o seu programa)
  1. Ler a e b (na ordem).
  2. Verificar a>0 e b>0 (senão avisar ou tratar o caso).
  3. Definir n\leftarrow 1024, \Delta x\leftarrow (b-a)/n.
  4. Calcular S_n=\Delta x\sum_{i=1}^n f(a+i\Delta x) com f(x)=x\sin x\ln x.
  5. Dobrar n ( n\leftarrow 2n), recalcular S_{2n}.
  6. Checar \text{err\_rel}=\dfrac{|S_{2n}-S_n|}{|S_{2n}|}. Se \text{err\_rel}<0{,}001 pare e retorne S_{2n}. Se não, volte ao passo 5. Limitar n a n_{\max} para garantir tempo.
  7. Como verificação opcional (se houver função Si disponível), comparar com F(b)-F(a) onde F(x)=\ln x(-x\cos x+\sin x)+\sin x-\operatorname{Si}(x).

Resposta

0.6156761264040039

Exercícios relacionados