Cálculo de Integral – método do Trapézio e Simpson com interface gráfica

Logo abaixo segue os códigos para o cálculo de Integral numérica pelo método do Trapézio simples e composto, Simpson 1/3 simples e composto e Simpson 3/8 simples e composto. Todos feitos no Matlab com direito a interface gráfica e visualização do gráfico do método do trapézio. Tornando-se um programa didático para mostrar a diferença de convergência entre os métodos.

Método do trapézio simples:

%limite de a à b
function tpzS(a,b)
global I;                %Variável global para o valor da Integral.
global f;                %Váriavel global para a função F definida na interface.
I=(b-a)*(f(a)+f(b))/2;   % Fórmula para o trapézio Simples.
end

Método do trapézio composto:

%limite de a à b com n intervalos.
function tpzC(a,b,n)
    global I;                   %Variável global para o valor da Integral.
    global f;                   %Váriavel global para a função F definida na interface.
    h=(b-a)/n;                  %tamanho do intervalo
    xi=a+h;                     %valor inicial para x
    soma=0;

    barra = waitbar(0,'Calculando...'); %declara barra de progresso.

    for i=1:n-1                         % contagem da soma das partes
                soma=soma+f(xi);        % soma partes intermediárias
                xi=xi+h;                % novo valor de xi
                waitbar(i/ (n-1));      % atualização da barra de progresso.
    end
    close(barra);                       %fecha a barra
    I =(h/2)*(f(a)+f(b))+h*soma;        % resultado da integral
end

Método de Simpson 1/3 simples:

%limite de a à b
function simpson13S(a,b)
global I;                  %Variável global para o valor da Integral.
global f;                  %Váriavel global para a função F definida na interface.
        h=(b-a)/2;                    %intervalo h
        I=(h/3)*(f(a)+4*f(a+h)+f(b)); % Fórmula para Simpson 1/3 Simples.
end

Método de Simpson 1/3 composto:

%limite de a à b com n intervalos
function simpson13C(a,b,n)
global I;                           %Variável global para o valor da Integral.
global f;                           %Váriavel global para a função F definida na interface.
h=(b-a)/n;                          %tamanho do intervalo
soma1=0;
soma2=0;
xi=a+h;                             %valor inicial para x

barra = waitbar(0,'Calculando...'); %declara barra

    for i=1:n-1                     %Somando as partes de acordo com 1/3 de Simpson.
        if rem(i,2)~=0              %Se o resto de i por 2 for diferente de zero.
            soma1=soma1+f(xi);
            xi=xi+h;
        else
            soma2=soma2+f(xi);
            xi=xi+h;
        end
        waitbar(i/ (n-1));                   %atualização da barra de progresso.
    end
    close(barra);                            %fecha a barra.
    I=(h/3)*(f(a)+4*soma1+2*soma2+f(b));     %Valor da Integral
end

Método de Simpson 3/8 simples:

%limite de a à b
function simpson38S(a,b)
global I;                       % Variável global para o valor da Integral.
global f;                       % Váriavel global para a função F definida na interface.
h=(b-a)/3;                                 % Tamanho do intervalo
I=(3/8)*h*(f(a)+3*f(a+h)+3*f(b-h)+f(b));   %Fórmula para Simpson 3/8 Simples.
end

Método de Simpson 3/8 composto:

%limite de a à b com n intervalos.
function simpson38C(a,b,n)
global I;                          %Variável global para o valor da Integral.
global f;                          %Váriavel global para a função F definida na interface.
h=(b-a)/n;                         %tamanho do intevalo
soma1=0;
soma2=0;
xi=a+h;                                %valor inicial para x

barra = waitbar(0,'Calculando...');    %declara a barra.

    for i=1:n-1                        %Soma as parte de acordo com 3/8 de Simpson.
        if rem(i,3)~=0                 % Se o resto da divisão por 3 for diferente de zero
            soma1=soma1+f(xi);
            xi=xi+h;
        else
            soma2=soma2+f(xi);
            xi=xi+h;
        end
        waitbar(i/ (n-1));                     % Atualiza a barra de progresso.
    end
    close(barra);                              %Fecha a barra de progresso.
    I=(3/8)*h*(f(a)+3*soma1+2*soma2+f(b));     % Calcula o valor da Integral.
end

Todos esse algoritmos se encontra no link do arquivo abaixo. Cada algoritmo está em um arquivo separado que é acessada pela interface gráfica e o resultado é retornado para a variável global I. Caso queira acessar o algoritmo pelo Command Window, basta chamar a função com seus argumentos a,b e n, porém não aparecerá nada na tela, mas nada que seja resolvido com um comando printf.

A interface gráfica utilizada no projeto ficou assim:

Essa interface pode ser visualizada tanto no Matlab (executar o arquivo Integral.m) quanto no arquivo executável que encontra-se na pasta, porém precisa ter instalado na máquina o Matlab.

Para um teste rápido, basta digitar a função:  x^2+4*x+4, colocar os limites, se possível a quantidade de intervalos e clicar no botão Calcular, o resultado aparecerá na caixa Valor.  Se estiver usando o método do trapézio aparecerá do lado direito o gráfico e o botão gerar gráfico, basta clicar que o gráfico aparecerá.

O executável foi gerado através do comando “mcc -m Integral.m”. Num  próximo post postarei como gerar esse executável mais detalhado e como gerá um instalador para ele.

Abaixo segue o link para os arquivos.

Um abraço, até a próxima.

6 Comentários

  1. Fábio

    Olá Guto, gostaria de parabenizar-te pelos posts. Me ajudaram muito!!!

    Porém, um dos trabalhos que tenho para fazer não consegui resolver. 🙁

    Se você puder me ajudar. Você é muito fera cara, Parabéns!

    Meu email é fabiocfm@hotmail.com caso possa me ajudar.

    Abs,
    Fabio

    Responder
    1. Guto Melo

      Obrigado Fábio pelo comentário. Se a sua dúvida estiver ao meu alcance, te ajudo sim! meu e-mail é netguto@yahoo.com.br.

      Abraços.

      Responder
  2. Rodrigo

    Olá Guto!
    Faço coro com o Fábio acima! Meus parabens pelos posts!
    É muito bacana ver alguem que escreve sobre algo que gosta pois o resultado sempre é muito bom!

    Estava procurando sobre métodos numéricos de integração e este seu post em particular me ajudou bastante.
    Muito obrigado e continue com o bom trabalho! =)

    Abraços!

    Responder
  3. Guto Melo

    Muito obrigado Rodrigo! Gosto de compartilhar meus projetos e minhas atividades acadêmicas! E com reconhecimento de vocês, só me dar mais vontade de compartilhar mais e mais!

    Abraços.

    Responder
  4. Plínio

    Guto Melo, muito bom o post. Mas gostaria de saber melhor sobre a criação deste executável com interface gráfico no MatLab.

    Responder
  5. Claudia Aquino

    Olá Guto, não consegui abrir o link pra download.
    Tem como vc me enviar?
    Abraço.
    Claudia

    Responder

Deixar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *