Pular para o conteúdo principal

[Implementação] Integração aproximada pelo Método do Trapézio - Portugol Studio

[Implementação] Integração aproximada pelo Método do Trapézio - Portugol Studio

Este artigo é uma continuação da discussão teórica feita aqui. Se você ainda não leu, por favor, leia. Aqui vamos simplesmente implementar, em Portugol Studio, tudo o que foi discutido lá.
Se você está procurando aprender a programar, considere assistir meu curso gratuito no Youtube.

Começando do começo

Conforme já discutido aqui (se você não leu, é a última chance), a equação para a integração aproximada pelo Método do Trapézio é a seguinte:

abf(x)dxΔx2i=1n[f(xi)+f(xi1)]\int\limits_a^b {f(x)dx} \approx \frac{\Delta x}{2}\sum\limits_{i=1}^n {[f(x_i) + f(x_{i-1})]}

E a integral que queremos calcular é a seguinte:

01(x5+27x4134x3+12x2+37x+15)dx\int\limits_0^1 {\left(x^5+27x^4-\frac{13}{4}x^3+\frac12 x^2 + 37x + 15\right) dx}

Primeiramente, vamos definir essa função no Portugol Studio (para facilitar nosso trabalho):

programa
{
    inclua biblioteca Matematica --> mat
    funcao real f(real x){
        retorne (mat.potencia(x,5)) + 27*(mat.potencia(x,4)) - ((13/4) * (mat.potencia(x,3))) + ((0.5)*mat.potencia(x,4)) + (37*x) + 15
    }
}

De antemão, já peço desculpas, mas o código Portugol Studio aqui não estará colorido de maneira adequada. Para ver o código colorido, baixe o arquivo e abra no seu Portugol Studio.

Calculando a integral

Vamos, agora, implementar a função que, de fato, calcula a integral. Primeiro, vamos definir xix_i. Vimos que x0=ax_0 = a, então x1=a+Δxx_1 = a + \Delta x e xi=a+iΔxx_i = a + i\Delta x.
No código, usaremos as seguintes variáveis:

A = área
Dx = Δx\Delta x = ban\frac{b-a}{n}
b1 = bb = base
b2 = BB = outra base
xi = xix_i
xi1 = xi1x_{i-1}
a = aa = limite inferior de integração
b = bb = limite superior de integração

Nos basta, então, seguir a equação que temos. Primeiro vou definir Δx\Delta x e algumas variáveis e, então, calcularemos o somatório (veja que, primeiro, defini xix_i e $x_{i-1}\ e depois somei chamando a função f).

funcao real integral(real a, real b, inteiro n){
    real A = 0.0
    real Dx = (b-a)/n
    para (inteiro i = 1; i<=n; i++){
        real xi  = a + Dx*i
        real xi1 = a + Dx*(i-1)
        A += f(xi) + f(xi1) 
    }
    A *= (Dx/2)
    retorne A
}

Por fim, basta multiplicar o somatório por Δx2\frac{\Delta x}{2}.

Recebendo dados do usuário

Agora que temos a função de integração, vamos receber aa, bb e nn do usuário e exibir o resultado:

funcao inicio()
{
    inteiro n
    real a, b
    escreva("Por favor, escolha um valor de n: ")
    leia(n)
    escreva("Insira os intervalos de integração: a = ")
    leia(a)
    escreva("b = ")
    leia(b)

    escreva(integral(a,b,n))
}

E, pronto, temos o programa finalizado (código completo no final). Apenas para efeito de teste, integrei no intervalo de 0 a 1 com n=1n=1, n=10n=10 e n=100n=100. A integral exata (obtida através da primitiva) também é mostrada abaixo.

12i=11[f(xi)+f(xi1)]=46.25\frac{1}{2}\sum\limits_{i=1}^1 {[f(x_i) + f(x_{i-1})]} = 46.25
120i=110[f(xi)+f(xi1)]=38.5049\frac{1}{20}\sum\limits_{i=1}^{10} {[f(x_i) + f(x_{i-1})]} = 38.5049
1200i=1100[f(xi)+f(xi1)]=38.41754999\frac{1}{200}\sum\limits_{i=1}^{100} {[f(x_i) + f(x_{i-1})]} = 38.41754999
01f(x)dx=922124038.42083333333333\int\limits_0^1 {f(x)dx} = \frac{9221}{240} \approx 38.42083333333333

Concluímos que conseguimos uma aproximação razoável com esse método.

Veja também a implementação em Python.

Código final:

raw

programa
{
    inclua biblioteca Matematica --> mat
    funcao real f(real x){
        retorne (mat.potencia(x,5)) + 27*(mat.potencia(x,4)) - ((13/4) * (mat.potencia(x,3))) + ((0.5)*mat.potencia(x,4)) + (37*x) + 15
    }
    funcao real integral(real a, real b, inteiro n){
        real A = 0.0 //area
        real Dx = (b-a)/n //Delta x
        real b1, b2 //bases
        para (inteiro i = 1; i<=n; i++){
            real xi  = a + Dx*i
            real xi1 = a + Dx*(i-1)
            A += f(xi) + f(xi1) 
        }
        A *= (Dx/2)
        retorne A
    }
    funcao inicio()
    {
        inteiro n
        real a, b
        escreva("Por favor, escolha um valor de n: ")
        leia(n)
        escreva("Insira os intervalos de integração: a = ")
        leia(a)
        escreva("b = ")
        leia(b)
        escreva(integral(a,b,n))
    }
}

Comentários

Postagens mais visitadas deste blog

Link Duplo - Abrir duas páginas com apenas um link

Algumas vezes, pode ser que seja necessário que apenas um link redirecione para duas páginas diferentes, por exemplo, quando um link deve abrir a página desejada e, ao mesmo tempo, abrir algum anúncio ou, ainda, quando o link principal é a página desejada e um texto de apoio é aberto. Entenda o processo Código utilizado:  <a href="link_da_nova_pagina.html" target="_blank" onclick="location.href='link_da_mesma_página.html'">Texto do link</a> Qualquer dúvida, entre em contato:  Vídeo no Youtube -  https://youtu.be/TW4kpa-0dYk . Canal no Youtube - HM Programming Facebook - HM Programming

Instalando o ChemDraw no Linux

Instalando o Chemdraw no Linux A migração para o Linux é dificultada para algumas pessoas devido à incompatibilidade de alguns programas. Um desses programas é o ChemDraw, importante programa de ilustrações para químicos que não está disponível no sistema do pinguim. Embora a utilização do chemfig \texttt{chemfig} chemfig com LaTeX \LaTeX L A T E ​ X seja uma ótima opção, a sintaxe pode assustar novos usuários. Por isso, neste tutorial mostrarei como instalar o ChemDraw no Linux utilizando o Wine.