Mostrando postagens com marcador Matemática. Mostrar todas as postagens
Mostrando postagens com marcador Matemática. Mostrar todas as postagens

Números Perfeitos em PHP: Como Descobrir e Gerar (Exercício Resolvido)

Números Perfeitos em PHP: Lógica e Funções na Prática 

Neste tutorial do nosso Curso de PHP, vamos resolver a incrível Questão 7 da nossa lista de exercícios sobre funções.

"Um número é dito perfeito quando ele é igual à soma de todos os seus divisores próprios (excluindo ele mesmo). Escreva um programa em PHP com funções que receba um número, diga se ele é perfeito e, em seguida, liste todos os números perfeitos até esse limite."

1. A Matemática: O que é um Número Perfeito?

Antes de programar, precisamos entender a regra do jogo. Pegue o número 6. Por quais números podemos dividir o 6 de forma exata (sem sobrar resto)? Podemos dividi-lo por 1, por 2 e por 3.

Agora, some esses divisores:

$$6 = 1 + 2 + 3$$

Como a soma dos divisores resulta exatamente no próprio número, o 6 é um Número Perfeito! Veja outro exemplo famoso, o número 28. Seus divisores são 1, 2, 4, 7 e 14. Se somarmos:

$$28 = 1 + 2 + 4 + 7 + 14$$

Temos outro número perfeito! Os próximos são 496 e 8128. Acredite se quiser, eles são muito raros. Até hoje, os matemáticos não sabem se existe algum número perfeito ímpar ou se eles são infinitos!

2. A Lógica de Programação

Como transformar isso em código PHP? Vamos criar uma função chamada somaDivisores($n). Dentro dela:

  1. Criamos uma variável $soma = 0 para acumular os valores.
  2. Usamos um laço for que começa no 1 e vai até $n - 1.
  3. Dentro do laço, usamos o Operador Módulo (%). Se $n % $i == 0, significa que a divisão é exata. Se for exata, nós adicionamos esse $i na nossa variável $soma.
  4. No final, retornamos a soma. Se o retorno for igual ao número original, EUREKA! É perfeito.

3. O Código PHP Completo e Funcional

Preparamos um código visualmente atraente onde o usuário digita um número. O sistema dirá se aquele número é perfeito e, de bônus, vai varrer e imprimir todos os números perfeitos que existem do 1 até o número que você digitou!

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Detector de Números Perfeitos - PHP</title>
    <style>
        .container { max-width: 500px; margin: 30px auto; font-family: sans-serif; text-align: center; border: 2px solid #cbd5e1; padding: 30px; border-radius: 10px; background: #f8fafc; }
        input[type="number"] { padding: 10px; font-size: 16px; width: 80%; margin-bottom: 15px; border-radius: 5px; border: 1px solid #94a3b8; text-align: center;}
        .btn { background: #10b981; color: white; border: none; padding: 10px 20px; font-size: 16px; border-radius: 5px; cursor: pointer; font-weight: bold; width: 85%; }
        .btn:hover { background: #059669; }
        .resultado { margin-top: 20px; padding: 15px; border-radius: 5px; background: #e0f2fe; color: #0369a1; border: 1px solid #7dd3fc; text-align: left; }
    </style>
</head>
<body>

<div class="container">
    <h2>✨ É um Número Perfeito?</h2>
    <form action="" method="get">
        <input type="number" name="numero" min="1" max="10000" placeholder="Digite um número (ex: 28)" required>
        <button type="submit" class="btn">Verificar e Buscar</button>
    </form>

    <?php
    // FUNÇÃO: Calcula a soma dos divisores de um número
    function somaDivisores($n) {
        $soma = 0;
        // Divide o número por todos os anteriores a ele
        for($i = 1; $i < $n; $i++) {
            if($n % $i == 0) { // Se o resto for 0, é divisor!
                $soma += $i;
            }
        }
        return $soma;
    }

    // Verifica se o usuário enviou o formulário
    if(isset($_GET['numero'])) {
        $num_usuario = intval($_GET['numero']);
        
        echo "<div class='resultado'>";
        
        // 1. Testa se o número digitado é perfeito
        if($num_usuario == somaDivisores($num_usuario)) {
            echo "<strong style='color: green; font-size: 1.2em;'>✔ O número $num_usuario É PERFEITO!</strong><br><br>";
        } else {
            echo "<strong style='color: red;'>❌ O número $num_usuario NÃO é perfeito.</strong><br><br>";
        }

        // 2. Busca todos os números perfeitos de 1 até o número digitado
        echo "<b>Números perfeitos encontrados entre 1 e $num_usuario:</b><br>";
        $encontrou_algum = false;
        
        for($j = 1; $j <= $num_usuario; $j++) {
            if($j == somaDivisores($j)) {
                echo "➔ $j <br>";
                $encontrou_algum = true;
            }
        }
        
        if(!$encontrou_algum) {
            echo "<i>Nenhum número perfeito encontrado nesse intervalo.</i>";
        }
        
        echo "</div>";
    }
    ?>
</div>

</body>
</html>

⚠️ Cuidado com o Processamento!

Como os números perfeitos são calculados dividindo um por um até o infinito, testar números maiores que 10.000 pode travar ou deixar o seu navegador muito lento! Por isso, no nosso formulário HTML, colocamos uma trava de segurança max="10000".

Gostou da Lógica? Aprimore-se! 💡

Exercícios como o dos Números Perfeitos são o segredo para treinar o seu cérebro de programador. Na nossa Apostila Completa de PHP, você encontra dezenas de exercícios resolvidos e comentados como esse, prontos para você estudar.

Baixar Apostila Completa de PHP

Potenciação em PHP: Como calcular potência com Laços e a função pow()

💡 O que você vai aprender:

Como calcular a potência de um número no PHP? Neste tutorial, você verá três formas: a lógica manual com laços de repetição (essencial para treinar o raciocínio), o uso da função nativa pow() e o operador de exponenciação moderno **.

A potenciação é uma operação matemática básica onde multiplicamos uma base por ela mesma tantas vezes quanto indicar o expoente. No PHP, existem diversas formas de realizar esse cálculo, desde o controle total via loops até funções de alto nível.

Como funciona a Potenciação?

Para calcular a potência de um número no PHP de forma direta, usamos a função pow($base, $expoente) ou o operador ** (ex: $base ** $expoente). Mas antes de usar os atalhos, entender a lógica por trás é o que diferencia um digitador de código de um programador real.

Potenciação em PHP: Base e Expoente

Exemplo: 5⁴ significa 5 multiplicado por ele mesmo 4 vezes (5x5x5x5 = 625).

Cálculo de Potência usando Laços (While, Do While e For)

Se você estiver em uma entrevista técnica e pedirem para calcular a potência sem usar funções prontas, você usará os loops. A ideia é começar com um resultado igual a 1 e multiplicá-lo pela base repetidamente.


<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Potenciação Manual no PHP</title>
</head>
<body>
    <form action="" method="get">
        Base: <input type="number" name="base" required /><br><br>
        Expoente: <input type="number" name="expoente" required /><br><br>
        <input type="submit" value="Calcular" />
    </form>

<?php
$base = $_GET['base'] ?? null;
$exp = $_GET['expoente'] ?? null;

if ($base !== null && $exp !== null) {
    // 1. Usando WHILE
    $resultadoWhile = 1;
    $count = 1;
    while($count <= $exp) {
        $resultadoWhile *= $base;
        $count++;
    }
    echo "Resultado com WHILE: $resultadoWhile <br>";

    // 2. Usando FOR (Mais limpo)
    $resultadoFor = 1;
    for($i = 1; $i <= $exp; $i++) {
        $resultadoFor *= $base;
    }
    echo "Resultado com FOR: $resultadoFor <br>";
}
?>
</body>
</html>

Domine a Programação em 2026 🚀

Aprenda PHP, JS, Python, Java, C, C++ e HTML com o material didático mais completo da internet. Do zero ao Full-Stack.

Quero meu Mega Pack!

Métodos Nativos do PHP: pow() e Exponenciação (**)

Embora aprender com laços seja importante para a faculdade ou lógica básica, no dia a dia usamos as ferramentas da linguagem. Se você precisar trabalhar com números decimais (ex: 1.5 elevado a 2.3), os laços manuais ficam muito complexos. É aí que entram as funções nativas:

A função pow()

Antigamente, era a forma padrão. Ela aceita dois parâmetros e retorna o resultado, lidando bem com números do tipo float.


$resultado = pow(5, 2); // Retorna 25

O Operador de Exponenciação (Moderno)

Introduzido no PHP 5.6 e padrão absoluto hoje em dia, o operador ** é muito mais intuitivo e rápido.


$resultado = 5 ** 2; // Retorna 25
$cubo = 2 ** 3;    // Retorna 8

🛠️ Curiosidade: O operador ** tem precedência sobre outros operadores matemáticos, o que significa que ele é calculado antes de somas ou subtrações na maioria dos casos!

⚠️ Atenção: Se você estiver estudando para certificações ou concursos, pratique a lógica com laços. Para projetos reais e freelances, use sempre o operador ** pelo desempenho e clareza.


Como Achar o Maior Número, Soma e Média em PHP (Exercícios Resolvidos)

🚀 O que você vai aprender hoje:

Como encontrar o maior número, a soma e a média em PHP? A lógica consiste em assumir que o primeiro número é o "maior" e compará-lo um a um com os demais. Para a soma, acumulamos os valores e, para a média, dividimos o total pela quantidade de itens.

  • Algoritmo clássico de comparação (If/Else).
  • Cálculo de Média Aritmética no Back-end.
  • Bônus Sênior: Como resolver o mesmo problema em 1 linha usando Arrays e funções modernas.

Fala, dev! Chegou a hora de afiar a lógica de programação. Vamos resolver juntos as questões 07 e 08 da nossa famosa lista de exercícios de laços em PHP.

Desafio 07: Faça um programa que leia 5 números e informe o maior número.

Desafio 08: Faça um programa que leia 5 números e informe a soma e a média dos números.

A Lógica Clássica (Passo a Passo para Iniciantes)

Para descobrirmos qual é o maior número de uma lista sem usar funções prontas, nós usamos uma técnica de "Rei da Colina". Funciona assim:

  1. Nós pegamos o primeiro número e dizemos: "Você é o maior número (o Rei) provisoriamente" ($maior = $n1;).
  2. Depois, olhamos para o segundo número. Ele é maior que o nosso "Rei"? Se for, ele toma a coroa ($maior = $n2;).
  3. Repetimos isso até o quinto número. Quem sobrar na variável $maior no final, é o vencedor absoluto.

Para a Soma e a Média, a matemática é simples e direta: somamos todos e dividimos por 5.

O Código: Resolvendo na Força Bruta

Abaixo está o script completo. Note que adicionamos o operador ?? (Coalescência Nula) para evitar erros caso o usuário acesse a página sem enviar o formulário.


<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <title>Maior, Soma e Média em PHP</title>
</head>
<body>

<h3>Analisador de Números</h3>
<form action="" method="get">
    Número 1: <input type="number" step="any" name="n1" required><br><br>
    Número 2: <input type="number" step="any" name="n2" required><br><br>
    Número 3: <input type="number" step="any" name="n3" required><br><br>
    Número 4: <input type="number" step="any" name="n4" required><br><br>
    Número 5: <input type="number" step="any" name="n5" required><br><br>
    <input type="submit" value="Analisar Dados">
</form>
<hr>

<?php
// Só processa se o formulário for enviado
if (isset($_GET['n1'])) {
    
    // Captura os dados com segurança
    $n1 = (float) $_GET['n1'];
    $n2 = (float) $_GET['n2'];
    $n3 = (float) $_GET['n3'];
    $n4 = (float) $_GET['n4'];
    $n5 = (float) $_GET['n5'];

    // 1. Encontrando o Maior
    $maior = $n1;
    if($n2 > $maior) $maior = $n2;
    if($n3 > $maior) $maior = $n3;
    if($n4 > $maior) $maior = $n4;
    if($n5 > $maior) $maior = $n5;
    
    echo "<strong>O maior número é:</strong> {$maior} <br>";

    // 2. Calculando a Soma
    $soma = $n1 + $n2 + $n3 + $n4 + $n5;
    echo "<strong>A soma total é:</strong> {$soma} <br>";

    // 3. Calculando a Média
    $media = $soma / 5;
    echo "<strong>A média aritmética é:</strong> {$media} <br>";
}
?>

</body>
</html>

Chega de escrever código repetitivo! ⚡

A lógica bruta ensina, mas o mercado exige produtividade. Se você quer dominar as melhores práticas, atalhos profissionais e se tornar um Desenvolvedor Full-Stack respeitado, conheça o nosso Mega Pack com 7 Apostilas.

Inclui: PHP, JavaScript, Python, Java, C, C++ e HTML/CSS.

Quero Dominar Todas as Linguagens 🚀

O Padrão 2026: Resolvendo com Arrays e Funções Nativas

O código acima funciona perfeitamente e é excelente para você treinar a sua lógica manual. Mas, no mundo real corporativo, se um programador Sênior ver você declarando 5 variáveis e fazendo 4 ifs seguidos, ele vai mandar você refatorar.

O PHP possui funções nativas poderosas. Veja como resolveríamos o mesmo problema agrupando os números em um ARRAYS EM PHP:


<?php
// Cria um Array (Lista) com os números recebidos
$numeros = [$n1, $n2, $n3, $n4, $n5];

// max() encontra o maior valor do Array automaticamente
$maior = max($numeros); 

// array_sum() soma todos os itens da lista
$soma = array_sum($numeros); 

// count() conta quantos itens existem, garantindo a média correta
$media = $soma / count($numeros); 

echo "Maior: {$maior} | Soma: {$soma} | Média: {$media}";
?>

Percebeu a diferença? O código ficou muito menor, mais limpo e infinitamente mais fácil de manter. Se amanhã o cliente pedir para analisar 100 números em vez de 5, o segundo código continua exatamente o mesmo, enquanto no primeiro você teria que digitar 99 ifs!


🎓 Valide sua Lógica de Programação!

Mostre para as empresas que você domina a estruturação de algoritmos e o ecossistema PHP. Ao finalizar seus estudos, garanta a sua certificação oficial.

Curso de PHP com certificado online Obter meu certificado!

Como Calcular Equação do 2º Grau (Bhaskara) no PHP [Código]

💡 O que você vai aprender nesta aula:

  • Como traduzir a Fórmula de Bhaskara para a linguagem PHP.
  • O uso da função matemática nativa sqrt() para raízes quadradas.
  • Como tratar os três cenários do Delta (Positivo, Zero e Negativo).
  • Como concatenar strings para exibir raízes imaginárias (Números Complexos).

Um dos grandes poderes da programação é a capacidade de resolver cálculos matemáticos complexos em frações de segundo. Nosso desafio final de hoje é criar uma calculadora de raízes para equações do segundo grau na forma $ax^2+bx+c=0$.

Como resolver uma Equação do 2º Grau no PHP?

Para resolver uma equação do segundo grau no PHP, precisamos calcular o valor de Delta ($\Delta=b^2-4ac$) e, em seguida, aplicar a função sqrt() dentro da Fórmula de Bhaskara para encontrar as raízes reais ou imaginárias.

A fórmula matemática universal que vamos traduzir para o código é esta:

$$x=\frac{-b\pm\sqrt{\Delta}}{2a}$$ 

O triângulo é a letra grega Delta ($\Delta$). O valor numérico dele é o que dita as "regras do jogo" na nossa estrutura de IF e ELSE. O comportamento gráfico dessas raízes pode ser visto no cruzamento da parábola com o eixo X:

  • Se $$\Delta > 0$$: Temos duas raízes reais e distintas (a parábola corta o eixo X em dois pontos).
  • Se $$\Delta = 0$$: Temos apenas uma raiz real, ou duas raízes iguais (a parábola apenas toca o eixo X).
  • Se $$\Delta < 0$$: Temos duas raízes imaginárias / complexas (a parábola "flutua" e não toca o eixo X).

Matemática + PHP deu nó na mente? 🤯

Traduzir fórmulas matemáticas complexas para o código exige uma Lógica de Programação afiada. Se você quer aprender a construir esses algoritmos sem travar, a Apostila PHP Progressivo é exatamente o que você precisa. Baixe agora e estude dezenas de exercícios resolvidos passo a passo, totalmente offline!

Quero Dominar a Lógica →

Script PHP Completo: Calculando as Raízes

O primeiro passo do nosso script deve ser a consistência de dados. Em uma equação do segundo grau, o coeficiente $a$ nunca pode ser igual a 0 (zero), caso contrário, o $x^2$ é anulado e a equação passa a ser do 1º grau. Se o usuário digitar $a = 0$, o script encerra ali mesmo.

Para o caso em que o delta for negativo, as raízes serão imaginárias. Para não darmos um erro de matemática no PHP tentando extrair raiz de número negativo, usamos um truque: extraímos a raiz do delta positivo (multiplicado por -1) e então concatenamos com a letra i usando o ponto . no PHP.

<html>
 <head>
  <title>Calculadora de Equação do 2º Grau - PHP</title>
 </head>
 <body>
 <h2>Calculadora de Bhaskara (ax² + bx + c = 0)</h2>
 <form action="" method="get">
  Coeficiente A: <input type="number" step="any" name="a" required /><br /><br />
  Coeficiente B: <input type="number" step="any" name="b" required /><br /><br />
  Coeficiente C: <input type="number" step="any" name="c" required /><br /><br />
  <input type="submit" value="Calcular Raízes" />
 </form> 
 <hr>

 <?php 
  // Verifica se o formulário foi enviado
  if(isset($_GET['a'], $_GET['b'], $_GET['c'])){
      
      $a = $_GET['a'];
      $b = $_GET['b'];
      $c = $_GET['c'];

      // Consistência: Se 'a' for 0, não é equação do 2º grau!
      if($a != 0){
          
          // Cálculo do Delta
          $delta = ($b * $b) - (4 * $a * $c);
          echo "<p>Valor de Delta: <b>$delta</b></p>";
          
          // Cenário 1: Duas raízes reais diferentes
          if($delta > 0){
              $raiz1 = (-$b + sqrt($delta)) / (2 * $a);
              $raiz2 = (-$b - sqrt($delta)) / (2 * $a);
              echo "<h3 style='color:green;'>Raízes Reais e Distintas:</h3>";
              echo "Raiz 1 (x'): <b>$raiz1</b> <br />";
              echo "Raiz 2 (x''): <b>$raiz2</b>";
          }
          // Cenário 2: Duas raízes reais idênticas
          elseif ($delta == 0){
              $raiz = -$b / (2 * $a);
              echo "<h3 style='color:blue;'>Raiz Real Única:</h3>";
              echo "Raiz 1 e 2: <b>$raiz</b>";
          }
          // Cenário 3: Raízes Imaginárias (Complexas)
          else {
              $real = -$b / (2 * $a);
              // Invertemos o sinal do Delta para conseguir extrair a raiz
              $img  = sqrt(-$delta) / (2 * $a); 

              $raiz1 = $real . " + " . $img . "i";
              $raiz2 = $real . " - " . $img . "i";
              
              echo "<h3 style='color:purple;'>Raízes Imaginárias (Complexas):</h3>";
              echo "Raiz 1: <b>$raiz1</b> <br />";
              echo "Raiz 2: <b>$raiz2</b>";
          }

      } else {
          echo "<h3 style='color:red;'>Erro: O coeficiente 'a' não pode ser ZERO!</h3>";
      }
  }
 ?>
 </body>
</html>

Como Descobrir o Tipo de Triângulo no PHP [Código]

💡 O que você vai aprender nesta aula:

  • A regra matemática da "Condição de Existência" de um triângulo.
  • Como usar operadores lógicos (&& e ||) no PHP.
  • Como estruturar IF e ELSE aninhados (um dentro do outro).
  • Resolução completa: verificando se o triângulo é Equilátero, Isósceles ou Escaleno.

Na programação, muitas vezes precisamos traduzir regras do mundo real (ou da matemática) para o código. O desafio de hoje é clássico: criar um script PHP que receba três valores digitados pelo usuário e diga não apenas se esses valores formam um triângulo válido, mas também qual é o tipo dele.

Como saber se um triângulo existe?

Para um triângulo existir, a soma das medidas de dois lados deve ser sempre maior que a medida do terceiro lado. No PHP, testamos isso verificando simultaneamente se $a + b > c$, $a + c > b$ e $b + c > a$. Se uma dessas condições for falsa, a figura não fecha.

Para colocar isso no PHP, usamos o operador lógico && (que significa "E"). Veja como fica a condição principal:

if( ($a + $b > $c) && ($a + $c > $b) && ($b + $c > $a) ){
    // O triângulo EXISTE! Agora podemos descobrir o tipo dele.
} else {
    echo "Estes valores não formam um triângulo.";
}

Triângulo Equilátero, Isósceles ou Escaleno no PHP

Se o código passar pelo primeiro if, sabemos que o triângulo existe. Agora, precisamos fazer perguntas secundárias. Para isso, usamos IF e ELSE Aninhados (colocar um IF dentro do bloco de outro IF).

[Image of equilateral isosceles scalene triangles]

As regras geométricas são simples:

  • Equilátero: Todos os 3 lados são iguais ($a = b$ e $b = c$).
  • Isósceles: Pelo menos 2 lados são iguais. Como já descartamos o equilátero no passo anterior, basta testar se ($a = b$ ou $a = c$ ou $b = c$). Para isso, usamos o operador || (OU).
  • Escaleno: Se não é equilátero e não é isósceles, só sobrou uma opção: todos os lados são diferentes! Cai direto no else.

Operadores Lógicos (&& e ||) deram tela azul? 💻

Estruturas aninhadas e operadores lógicos costumam ser o grande terror de quem está começando. Mas não precisa ser assim! Na Apostila PHP Progressivo, você encontra explicações visuais e dezenas de exercícios resolvidos para você treinar a sua lógica passo a passo, no seu tempo e offline.

Baixar Apostila Completa →

Script PHP Completo: O Código Final

Veja como juntamos o HTML do formulário com a lógica do PHP. Adicionamos a função isset() para evitar erros ao carregar a página pela primeira vez e usamos type="number" no HTML para garantir que o usuário não digite letras.

<html>
 <head>
  <title>Validador de Triângulos - PHP</title>
 </head>
 <body>
 <h2>Descubra o tipo do seu Triângulo</h2>
 <form action="" method="get">
  Lado A: <input type="number" step="any" name="lado_a" required /><br /><br />
  Lado B: <input type="number" step="any" name="lado_b" required /><br /><br />
  Lado C: <input type="number" step="any" name="lado_c" required /><br /><br />
  <input type="submit" value="Testar Triângulo" />
 </form> 
 <hr>

 <?php 
  // Verifica se o usuário enviou o formulário
  if(isset($_GET['lado_a'], $_GET['lado_b'], $_GET['lado_c'])){
      
      $a = $_GET['lado_a'];
      $b = $_GET['lado_b'];
      $c = $_GET['lado_c'];

      // 1. Condição de Existência do Triângulo
      if( ($a + $b > $c) && ($a + $c > $b) && ($b + $c > $a) ){
          
          // 2. Classificação (IFs Aninhados)
          if($a == $b && $b == $c) {
              echo "<h3 style='color:blue;'>É um Triângulo Equilátero!</h3>";
          } 
          elseif ($a == $b || $a == $c || $b == $c) {
              echo "<h3 style='color:green;'>É um Triângulo Isósceles!</h3>";
          } 
          else {
              echo "<h3 style='color:purple;'>É um Triângulo Escaleno!</h3>";
          }
          
      } else {
          echo "<h3 style='color:red;'>Erro: Estes valores NÃO formam um triângulo!</h3>";
      }
  }
 ?>
 </body>
</html>

Conseguiu entender a lógica dos IFs dentro de IFs? Excelente! Vamos subir o nível no próximo tutorial.

Avançar para a Próxima Aula »

Matemática em PHP - Operadores Aritméticos: Soma, Subtração, Multiplicação, Divisão e Resto da Divisão

Neste tutorial de nosso curso de PHP, vamos estudar um grupo de operadores muito importantes, os aritméticos, que usaremos para fazer cálculos matemáticos em PHP, como adição, subtração, produto, divisão e resto da divisão.

Entender como o PHP manipula números é essencial para qualquer desenvolvedor, pois desde a lógica de um simples contador até o processamento de grandes volumes de dados financeiros depende desses operadores básicos.

🇺🇸 Looking for the English version? Read this article in English.

📚 Domine o PHP com o Melhor Material!

O site é apenas o começo. Na Apostila PHP Progressivo, você encontra todo o conteúdo organizado para estudo offline, centenas de exercícios resolvidos e material exclusivo para acelerar sua carreira de programador.

BAIXAR APOSTILA AGORA

Operador de Soma: +

De uma maneira geral, os operadores aritméticos são bem simples, pois lembram bastante os que já conhecemos e utilizamos no dia-a-dia. Por exemplo, o de adição é o símbolo +.

Teste os comandos abaixo em seu servidor, criando um script PHP simples:

echo 1+1;
echo 21+12;

Note como o PHP funciona, por si só, como uma calculadora potente. Ele processa a expressão matemática no servidor e imprime diretamente para o navegador o resultado final das operações.

Operador de Subtração: -

Assim como o operador de somar, temos o de subtrair, usado para encontrar a diferença entre dois valores: o símbolo -.

Teste os códigos e veja os resultados práticos:

echo 1-1;
echo 21-12;

Uma observação importante para quem está começando: se você fizer echo 21-12;, o resultado na página HTML será 9. No entanto, se você colocar entre aspas: echo "21-12";, o resultado será o texto literal 21-12.

Isso acontece porque, no primeiro caso, o PHP realizou um cálculo aritmético real. No segundo, ele tratou a informação como uma String (cadeia de caracteres). Entender que "1" é texto e 1 é número é um dos conceitos fundamentais da programação.

Operador de Multiplicação: *

Diferente do que usamos na escola, o símbolo da multiplicação (produto) na computação não é o "x" nem o ponto, mas sim o asterisco: *.

Faça o teste em seu código:

echo 2*2;
echo 3*3;

Você pode inclusive realizar essas contas utilizando variáveis em PHP. Veja como criamos duas variáveis e armazenamos o produto em uma terceira chamada $resultado:

<?php
  $numero1 = 21;
  $numero2 = 12;
  $resultado = $numero1 * $numero2;
  echo "Produto: $resultado";
?>

Operador de Divisão: /

Para realizar divisões, utilizamos a barra inclinada para a direita: /.

Experimente os seguintes cálculos:

echo 4 / 2; // Resultado: 2 (Inteiro)
echo 5 / 3; // Resultado: 1.6666667 (Float/Decimal)

O PHP gerencia os tipos de dados de forma inteligente. Se a divisão for exata entre inteiros, ele pode retornar um inteiro, mas se houver sobra, ele automaticamente converte o resultado para um valor decimal (quebrado).

Veja este exemplo com variáveis:

<?php
  $var1 = 6;
  $var2 = 2;
  echo $var1 / $var2; // Resultado: 3
?>

Operador Resto da Divisão (Módulo): %

Para entender este operador, precisamos lembrar das divisões armadas do ensino fundamental. Naquelas contas, tínhamos o dividendo, o divisor, o quociente e o resto.

[Image of parts of a long division: dividend, divisor, quotient, remainder]

Representação visual dos componentes de uma divisão.

O operador % serve justamente para capturar o que sobra de uma divisão:

echo 4 % 2; // Resultado: 0 (Divisão exata)
echo 4 % 3; // Resultado: 1 (Sobra 1)

A Lógica do Operador de Resto

O uso do módulo é riquíssimo em lógica de programação. Por exemplo, o resto da divisão de um número par por outro par (menor) é sempre 0. Já o resto da divisão de um par por um ímpar menor é 1. Usamos isso constantemente para descobrir se um número é par ou ímpar.

Algumas curiosidades matemáticas importantes sobre o resto:

  • O resto da divisão por 2 sempre resultará em 0 ou 1.
  • O resto da divisão por 3 resultará em 0, 1 ou 2.
  • Generalizando: o resto da divisão por n resultará sempre em valores de 0 até n-1.

Dica Prática: Se você quer gerar números dentro de um intervalo fixo, o operador de resto é seu melhor amigo. Por exemplo, se quiser resultados de 1 até 10, basta fazer o resto por 10 (que dá de 0 a 9) e somar 1:

$numero % 10; (Gera de 0 a 9)
1 + ($numero % 10); (Gera de 1 a 10)

Aprofundando o Conhecimento

Além das quatro operações, o PHP moderno (versão 8+) também possui o operador de Exponenciação (**) para elevar números a uma potência (ex: echo 2 ** 3; resulta em 8). Além disso, lembre-se da Precedência: Multiplicações e divisões são resolvidas antes de somas e subtrações, a menos que você use parênteses para forçar a ordem.

📌 Pratique para dominar!

Não se preocupe se essa lógica parecer complexa agora. No futuro, usaremos o resto da divisão para gerar números aleatórios e muito mais. Por enquanto, o segredo é: testes, testes e mais testes. Tente criar seus próprios cálculos usando variáveis diferentes e observe como o PHP se comporta.

Conseguiu rodar os exemplos? Qual foi o resultado mais inesperado que você encontrou? Deixe sua dúvida nos comentários!

A transformada Z

A transformada de Laplace é a generalização da transformada de Fourier para sistemas de tempo contínuo.
Ou seja, a Transformada de Fourier de tempo contínuo é um caso particular da Transformada de Laplace, onde o $$s$$ de Laplace é:
$$s = jw $$.

O termo digital, de Processamento Digital de Sinais, nos diz que estamos trabalhando com tempo discreto, pois computadores, e máquinas digitais de uma maneira geral, trabalham com bits. Ou seja, é tudo discreto.

E como há sempre uma relação direta entre sistemas de tempo contínuo e discreto, também há uma generalização da Transformada de Fourier para tempo discreto, que é conhecida é a Transformada Z, objetivo de estudo desse artigo.

A Transformada Z no Processamento Digital de Sinais


A definição da Transformada Z

Seja uma sequência discreta representada por: $$ x(n) $$
Sua transformada-z é representada por: $$ X(z) $$
Onde a letra z se refere a representação de um número complexo:$$ z = x +ij $$

Sabendo disso, a fórmula matemática da Transformada Z é dada por:
$$ X(z) = \sum_{n=-\infty}^\infty x(n) z^{-n}$$

Essa é a chamada Transformada Z bilateral, ou bidirecional, pois varia de $$ -\infty $$ até $$ \infty $$.
Caso ele iniciasse em 0, seria chamada de Transformada Z unilateral:
$$ X(z) = \sum_{n=0}^\infty x(n) z^{-n}$$

A Transformada Z como caso especial de Transformada de Fourier

Do estudo dos números complexos, sabemos que: $$ z = re^{jw}$$
Vamos substituir essa relação na definição de Transformada Z.
Obtemos
$$ X(z) = \sum_{n=-\infty}^\infty x(n) (re^{jw})^{-n}$$
$$ X(z) = \sum_{n=-\infty}^\infty x(n) r^{-n}e^{-jwn}$$

Notou semelhança? Não?
E se fizermos: $$|z|=1$$
Ou seja:
$$r=1 $$
$$|e^{jw}|=1$$

A Transformada Z ficaria:
$$ X(e^{jw}) = \sum_{n=-\infty}^\infty x(n)e^{-jwn}$$
que é a nossa conhecida Transformada de Fourier.

Logo, a Transformada de Fourier é a Transformada Z quando: $$|z| = 1$$

A convergência da Transformada Z

Como, a Transformada Z nada mais é que uma soma. Obviamente, se essa soma for um número que tendo ao infinito, em nada nos serve ter esse X(z), pois não podemos trabalhar, na prática, com números que tendem ao valor infinito.
Portanto, é de vital importância que a soma da série seja convergente, que seja absolutamente somável. Ou seja, ela tem que resultar em um número, um valor.

Para termos certeza da convergência da série, precisamos garantir que o resultado do somatório não tende ao infinito. E para garantir isso, precisamos ter certeza que cada elemento da soma não tende ao infinito.

Logo, para que a Transformada Z seja convergente, devemos ter:
$$\sum_{n=-\infty}^\infty |x(n) r^{-n}e^{-jwn}| < \infty$$

Como:
$$|e^{-jwn}| = 1 $$

Chegamos na equação da convergência da transformada:
$$\sum_{n=-\infty}^\infty |x(n) r^{-n}| < \infty$$

Transformada de Fourier de tempo contínuo - Representando sinais aperiódicos

Vimos, até o presente momento, sobre os sinais peridódicos, como os sinais trigonométricos e suas representações usando exponenciais complexas.
A importância deles dispensa comentários. Porém, não são os únicos.

Periodicidade nos remete a 'perfeição', é algo mais teórico. Na natureza mesmo, a maioria dos sinais são aperiódicos. E como tais, devem ser estudados e analisados.

Esta seção, sobre A Transformada de Fourier, visa fazer isso: manusear matemáticamente os sinais para obter uma série de propriedades e resultados desejados.



- Introdução e definição

Para representar os sinais periódicos, usamos exponenciais complexas harmonicamente relacionadas, através de uma combinação linear dessas frequências.
Nos sinais aperiódicos, que veremos agora, a idéia é semelhante, porém os harmônicos estão infinitesalmente próximos, e a soma (combinação linear) se torna uma integral.

A Transformada de Fourier nos mostra, portanto, esse espectro de harmônicos, enquanto a Transformada inversa de Fourier nos diz os coeficientes do sinal, em forma de combinação linear das exponenciais.

A série de Fourier: Sinais Periódicos de Tempo Discreto

Vamos ver agora como se comporta a representação dos sinais periódicos que são discretos, quando o representamos na série de Fourier, suas principais características e as diferenças e semelhanças em relação aos sinais de tempo contínuo.

Definição da série de Fourier para sinais de tempo discreto e periódicos

Analogamente ao sinal contínuo, o sinal periódico de tempo discreto S[n] é aquele tal que:
$$S[n] = S[n + N] $$

Quando N é um inteiro positivo e é o menor valor que satisfaz a equação acima, dizemos que N é o período de S[n] ou número de amostra, e a frequência fundamental do sinal é dada por:
$$\omega_0 = \frac{2\pi}{N} $$

Logo, podemos representar toda a gama de sinais que são periódicos de período N e que tem frequências dada por: 
$$\omega_k = \frac{2k\pi}{N} $$

Fazendo uma análise matemática dessa expressão é possível notar que os valores da frequência vão se repetir. Na verdade, só temos N valores distintos de frequência possíveis, devido ao fato do período ser sempre um inteiro.

Um fato importante, em relação aos sinais de tempo contínuo, é que o sinais de tempo discreto são representados por uma série finita, pois só existem um número finito de frequências.

Fazendo a manipulação algébrica através do somatório de todos os sinais harmônicos, chegamos a série de Fourier para sinais periódicos de tempo discreto:
$$ S[n] = \sum_{k=\left \langle N \right \rangle} a_k e^{jkw_0N}$$
$$ a_k = \frac{1}{N} \sum_{n=\left \langle N \right \rangle}x[n] e^{-jkw_0n} $$

Ou seja, aqui, temos que escolher um intervalo qualquer de N valores consecutivos para representarmos um sinal sob a forma de série de Fourier e para descobrir os coeficientes da série.

Propriedades da série de Fourier em sinais de tempo contínuo

Mostraremos aqui algumas propriedades que podem, e devem ser usadas, nas séries de Fourier onde o tempo é contínuo, pois evitam trabalho e cálculos desnecessários, visto que podemos simplificar e fazer algumas deduções.

Propriedade da Linearidade

Sejam:
$$A(x)$$ e $$B(x)$$
dois sinais periódicos de tempo $$T$$, cujos coeficientes da série de Fourier são
$$a_n$$ e $$b_n$$ .

Se o sinal:
$$C(x)$$
é dador por uma combinação linear dos sinais A(x) e B(x):
$$C(x) = k_1 A(x) + k_2 B(x) $$ , onde $$k_1$$ e $$k_2$$ são constantes
, os coeficientes da série de Fourier também o serão.

Isso quer dizer que, sejam:
$$c_n$$
os coeficientes da série de Fourier do sinal de C(x), eles podem ser representados por:

$$c_n = k_1 a_n + k_2 b_n $$

Propriedade da reflexividade do tempo

Refletir o tempo é fazer com que o tempo 't' receba os valores '-t'. É como se rebatéssemos o gráfico em relação ao eixo y.

Sabemos que a definição da série de Fourier é dada por:
$$ x(t) = \sum_{n=-\infty}^{n=+\infty}a_n e^{i \,n \omega_0 \, t}$$

Vamos ver o que acontece com o sinal quando ocorre a reflexão no tempo:
$$ x(-t) = \sum_{n=-\infty}^{n=+\infty}a_n e^{-i \,n \omega_0 \, t}$$

Vamos chamar esse novo sinal, x(-t), de y(t) e '-n'  de 'k', para que y(t) fique na forma da série de Fourier:
$$ y(t)= \sum_{k=-\infty}^{k=+\infty}a_{-k} e^{i \,k \omega_0 \, t}$$

Ou seja, quando refletimos o tempo refletimos também os índices.

Assim, se o sinal S(x) possui índices $$a_n$$
O sinal S(-x) terá índices $$a_{-n}$$

Isso é interessante. Mas importante mesmo é a relação com a paridade.
Se o sinal for par, ou seja:
$$ x(t) = x(-t) $$
$$ a_n = a_{-n}$$
Os coeficientes da série de Fourier também serão pares!

E caso o sinal seja ímpar:
$$ x(t) = -x(-t) $$
$$ a_n = -a_{-n}$$
Os coeficientes da série de Fourier também serão ímpares!

E qual a utilidade disto?
Ora, se souber $$a_n$$ , saberá $$a_{-n}$$ e não terá que fazer cálculos desses índices separados, à toa.
Portanto, antes de calcular os índices da série de Fourier para tempo contínuo, verifique a propriedade de reflexão no tempo. Assim, saberá a paridade dos coeficientes da série .

Deslocamento de tempo

Seja A(t) um sinal dado em função do tempo.
Deslocar o sinal em um valor de tempo $$t_0$$ significa analisar o seguinte sinal resultante:
$$A(t - t_0)$$

Se os coeficientes da série de Fourier do sinal A(t) são dados por:
$$ a_n = \frac{1}{T} \int_T A(t) e^{-i \,n \omega_0 \, t} dt$$

Então os coeficientes da série do sinal $$A(t - t_0)$$ serão dados por:
$$ a'_n = \frac{1}{T} \int_T A(t - t_0) e^{-i \,n \omega_0 \, t} dt$$

Como é possível notar pela fórmula acima, embora tenhamos deslocado o sinal, seu período continua sendo T.
O que faz sentido. Veja 'deslocamento' como um deslocamento físico mesmo. É como se você pegasse o sinal da função e simplesmente colocasse ele em outro local do plano cartesiano.
Vendo assim, é fácil ver a razão do período continuar sendo o mesmo.

Fazendo a substituição:
$$y = t - t_0$$

Isolando 't' e integrando em relação à y, chegamos a :
$$ a'_n = e^{-i \,n \omega_0 \, t_0} a_n$$

Ou seja, quando deslocamos um sinal de um tempo $$t_0$$
Estamos alterando seus coeficientes de um fator: $$e^{-i \,n \omega_0 \, t_0}$$
Note, porém, que esse fato tem módulo unitário.

Logo, deslocar um sinal no tempo não irá alterar o módulo dos coeficientes da série de Fourier.

Propriedade da série de Fourier: alterando a escala do tempo do sinal em um fator

Seja o sinal A(t) e um número positivo real k que será o fator.
Segundo a definição de série de Fourier, podemos expressar a série na forma:
$$ A(t) = \sum_{n=-\infty}^{n=+\infty}a_n e^{i \,n \omega_0 \, t}$$

Ao alterarmos a escala do tempo em um fator kA(kt) , também alteramos seu período, que agora é: 
$$\frac{T}{k}$$

Como a frequência fundamental é dada por:
$$ w_0 = \frac{2\pi}{T}$$

A nova frequência será:
$$w = \frac{2\pi}{\frac{T}{k}} = k w_0$$

Então, o novo sinal da série de Fourier será dado por:
$$ A(kt) = \sum_{n=-\infty}^{n=+\infty}a_n e^{i \,n k\omega_0 \, t}$$

Ou seja, os coeficientes $$a_n$$ permanecem inalterados. Porém a frequência do sinal mudou.

Aplicando o conjugado complexo

Segundo a definição de série de Fourier, podemos expressar a série na forma:
$$ A(t) = \sum_{n=-\infty}^{n=+\infty}a_n e^{i \,n \omega_0 \, t}$$

Aplicando o conjugado em ambos lados:
$$ A^{*}(t) = \sum_{n=-\infty}^{n=+\infty}a_n^* e^{-i \,n \omega_0 \, t}$$

Fazendo:
$$k=-n$$

Temos:
$$ A^{*}(t) = \sum_{k=-\infty}^{k=+\infty}a_{-k}^* e^{i \,k \omega_0 \, t}$$

Logo, quando aplicamos o conjugado em uma série de Fourier, estamos aplicando o complexo conjugado em seus coeficientes e estamos também aplicando a propriedade da reflexão.

Caso o sinal seja real:
$$A(t) = A^*(t)$$
Então:
$$a_n=a^*_{-n}$$
$$a^*_n = a_{-n}$$
Chamamos essa última relação de simetria conjugada.


Com base nisso e na propriedade da reflexividade, é fácil mostrar que:

Caso o sinal seja real e par, os coeficientes da série de Fourier são reais e pares:
simetria conjugada: $$a^*_n = a_{-n}$$
reflexividade do sinal par: $$ a_n = a_{-n} $$
Logo, os coeficientes são reais: $$a_n = a^*_n $$



Caso o sinal seja real e ímpar, os coeficientes da série de Fourier são ímpares e imaginários:
simetria conjugada: $$a^*_n = a_{-n}$$
reflexividade do sinal ímpar: $$ a_n = - a_{-n} $$
Logo, os coeficientes são puramente imaginários: $$a_n = - a^*_n $$


Note também que, em qualquer dos casos, o módulo do coeficientes da série de Fourier permanecem inalterados quando aplicamos a propriedade da simetria conjugada.

Produto de Sinais

Sejam dois sinais de tempo contínuo, de mesmo período T: $$A(t)$$ e $$B(t)$$
com coeficientes da série de Fourier dados, respectivamente, por: $$a_n$$ e $$b_n$$

O n-ésimo coeficiente do produto: $$A(t) . B(t) $$ , que também possui período T, é dado por:
$$c_n = \sum_{k=-\infty}^{k=\infty} a_k . b_{n -k} $$

Essa relação não só parece como pode ser vista como uma soma de convolução discreta dos coeficientes das sequências de Fourier que representam sinais.
Outra forma de obter essa relação é simplesmente multiplicando as representações dos sinais A(t) e B(t) sob a forma de série de Fourier e rearranjando e agrupando seus termos.


A relação de Parseval

A relação de Parseval é famosa, e muito útil, porque relaciona diretamente o sinal com seus coeficientes e é obtida através do cálculo da potência média de um intervalo de período do sinal, resultando na expressão de Parseval:
$$ \frac{1}{T} \int_T \left\vert A(t) \right\vert^2 dt = \sum_{n=-\infty}^{n=\infty} \left\vert a_n \right\vert^2$$

Onde A(t) é o sinal de tempo contínuo de período T, de coeficientes da série de Fourier $$a_n$$.
Um detalhe importante e que torna a equação de Parseval bem abrangente é o fato que ela é válida para qualquer sinal periódico, visto que expressão foi obtida pelo cálculo da potência média de um sinal periódico qualquer.

Condições de Dirichlet | Séries de Fourier

Nem toda função periódica pode ser representada pela série de Fourier.
O rigor matemático impõe algumas condições e critérios para que possamos usar a tão famosa e útil série, e nem mesmo o próprio Fourier foi capaz de desenvolver as condições em que as séries eram válidas.

Houveram muitas discussões, principalmente envolvendo a questão das descontinuidades.
Mas coube ao matemático alemão Dirichlet a formalização das condições:



Primeira condição:
"O sinal deve ser absolutamente integrável". 

Isto é, se o sinal é s(t):
Então a integral
$$\int_T |s(t)| dt $$
deve existir.

Se tal integral, que representa o sinal, deve existir, é fácil concluir que os coeficientes que representam a série de Fourier também devem.
Trocando em miúdos: tanto a integral como os coeficientes não tendem ao infinito.

Segunda condição:
Em um intervalo qualquer sinal, não deve existir infinitos pontos de máximo e mínimo.

Por exemplo, funções trigonométricas do tipo:
$$ \sin{(k/t)} $$
Para k inteiro, no intervalo t de ente 0 e 1. Pois nesse intervalo a função varia entre infinitos valores de máximo e mínimo e não há como representar tal função usando os coeficientes da série de Fourier.
Veja como a função se comporta quando se aproxima de 0, para:
$$ f(t) = \sin{(\pi/t)} $$

Veja como se faz no Wolfram Alpha: www.wolframalpha.com/input/?i=sin(pi/t),+from+t=0+to+1


Terceira Condição:
"Em um intervalo finito qualquer do sinal, não devem existir infinitas descontinuidades."

Funções desse tipo não são 'normais' na natureza. São, geralmente, casos de estudo teórico e é intuitivo entender o motivo de função com infinitas descontinuações (ou seja, saltos no gráfico, sem motivos aparente) não serem possíveis de serem representadas pela série de Fourier.
Embora seja possível utilizar a série de Fourier em sinais com número finito de descontinuidade, não é possível em sinais mais 'aleatórios', com infinitos casos de singularidades.
Essa incerteza no cálculo de descontinuidades infinitas se deve ao fato de que a equação da série de Fourier tende para a média dos valores na borda da descontinuidade, não sendo possível garantir tal convergência em casos de infinitas descontinuidades.


Definindo série de Fourier: Sinais Periódicos de Tempo Contínuo | Séries de Fourier

Nesse artigo definimos a série de Fourier e o motivo dela ser usada para representar sinais periódicos de tempo contínuo. Além de mostrar sua utilidade e onde é empregada.

Relembrando do 2o grau, o período de uma função é o menor número positivo T tal que:
x(t) = x(t + T)

Já a frequência associada a um tempo $$ t $$ é dada por:
$$ \omega = 2 \pi /t $$

Vamos usar o exemplo mais simples de equação exponencial periódica:
$$ x(t) = e^{i \omega_0 t} $$

Esse $$\omega_0$$ significa frequência fundamental. É a frequência associada ao período $$ T $$ :
$$ \omega = 2 \pi /T $$

Agora analisemos o sinal:  (*)
$$ s(t) = e^{i \,n \omega_0 \, t} , para n = 0, \pm 1 , \pm 2, \pm 3 ... $$

Vamos pegar a parte exponencial e ver melhor:
$$ e^{i \,n \, \omega_0 t} =  e^{i \,n 2 \pi /T \, t} =  e^{i \, 2 \pi /(T/n) \, t} $$

Note que nesse sinal, para cada valor de $$ n $$, o sinal vai ter uma frequência múltipla de $$ \omega_0 $$ .
Ou seja, são todos possuem período $$ T $$ também, pois os sinais terão período dado por $$ (T/n) $$ , e $$ T $$ é múltiplo de $$ (T/n) $$ .
A esse conjunto de sinais, definido pela equação (*), dizemos que são um conjunto harmonicamente relacionado, e usaremos bastante em nosso estudo de séries de Fourier.

Nesse conjunto de equações, que formam o sinal, para:

$$ n = \pm 1 $$, dizemos se tratar do primeiro harmônico ou fundamentais
$$ n = \pm 2 $$, dizemos se tratar do segundo harmônico.
e assim sucessivamente.

Sabendo de período, harmônico e conjunto de equações harmonicamente relacionadas, podemos apresentar a tão famosa série de Fourier.

A série de Fourier


Definimos como série de Fourier uma combinação linear desse conjunto de equações harmonicamente relacionadas, e representaremos da forma:

$$ x(t) = \sum_{n=-\infty}^{n=+\infty}a_n e^{i \,n \omega_0 \, t}$$

Ou seja, qualquer função periódica (como as trigonométricas) pode ser representada dessa forma.

Podemos dizer então, que uma função, como seno e cosseno, é uma combinação linear de exponenciais.
A genialidade por trás da série é que ela nos permite ver algumas funções e sinais, como de uma tangente por exemplo, de uma maneira diferente: através de exponenciais, e estas permitem um algebrismo mais fácil além de outras características que serão detalhadas em breve.

Por hora, precisamos focar em outro detalhe: descobrir os índices $$ a_n $$ , que são chamados de coeficientes da série de Fourier.

Para isso, multiplicaremos ambos os lados por $$ e^{-j k \omega_0 t} $$ e integrando ambos os lados no intervalo de um período.
Para resolver a integral, basta transformar a exponencial para a forma trigonométrica e integrar, que teremos o par de equações que define a serie de Fourier:

$$\begin{cases}
x(t) = \sum_{n=-\infty}^{n=+\infty}a_n e^{i \,n \omega_0 \, t} \\

a_n = \frac{1}{T} \int_T x(t) e^{-i \,n \omega_0 \, t} dt
\end{cases} $$

O coeficiente $$a_0$$ tem um valor especial, constante, dado por:
$$ a_0 = \frac{1}{T} \int_T x(t) dt  $$

e é chamado de nível dc e $$a_0$$ é o valor médio de x(t).

A série de Fourier não é apenas mais uma representação do sinal periódico. Se ela é tão famosa e usada,  devem existir razões, além da facilidade do algebrismo e análise gráfico do sinais.
É fácil encontrar na literatura, como no Oppenheim, a demonstração que os coeficiente da série de Fourier em uma combinação linear finita são os que minimizam o erro.

O que isso quer dizer?
Obviamente que não vamos representar um sinal com infinitos coeficientes (se existirem, muitas vezes boa parte deles são nulos). Então é comum representar o sinal usando somente alguns coeficientes.
O que é possível demonstrar é que, quanto mais coeficientes da série de Fourier nós utilizarmos, mais perfeita e mais próxima nossa representação é do sinal real.

- Exemplos

Vamos representar o sinal função: $$ f(x) = x $$
Em intervalos de valor $$2 \pi $$ :


A medida que formos adicionando mais coeficientes da série de Fourier, mais nosso sinal (em vermelho) irá se aproximar da função real, veja:




O site do MIT fez um aplicativo em Java que mostra esse efeito:
http://ocw.mit.edu/ans7870/18/18.06/javademo/FourierSeries/
Você coloca a equação e escolhe o número de termos da série de Fourier que desejar, e vai ver a aproximação desenhada em cima da função real.

Autovalor e Autofunção de um sistema | Séries de Fourier

Vamos mostrar a importância dos números complexos em sistemas invariantes no tempo (LIT).


Usaremos a notação:

$$e^{s t}$$, para sinais de tempo contínuo
$$z^n$$, para sinais de tempo discreto
onde s e z são números complexos.
Em vez de falar o porque do uso de exponenciais em sistemas do tipo LIT, vamos mostrar o que ocorre quando um desses não números são entrada.
Seja x(t)= $$e^{s t}$$ a entrada e h(t) a resposta ao impulso de tal sistama LIT.
Da convolução, sabemos:

$$ y(t) = \int_{-\infty}^{+\infty}h(\rho) x(t-\rho)\,d\rho $$

Fazendo as substituições com os nossos dados:

$$ y(t) = \int_{-\infty}^{+\infty}h(\rho) e^{s(t - \rho)} d\rho $$

$$ y(t) = \int_{-\infty}^{+\infty}h(\rho) e^{st} e^{s\rho} d\rho $$

$$ y(t) =  e^{st}  \int_{-\infty}^{+\infty}h(\rho) e^{-s\rho} d\rho $$

Vamos definifir a função:
$$A(s)= \int_{-\infty}^{+\infty}h(\rho) e^{-s\rho} d\rho $$

Do cálculo integral, por h(t) ser uma resposta ao impulso e que o módulo função exponencial é um número real, a integral converge.
Assim, a função A(s) existe, e é uma constante complexa que depende de s.

Podemos escrever a saída da seguinte formato:
$$ y(t) = A(s) e^{s t} $$

Aqui chegamos em uma importante conclusão, apenas olhando para a equação anterior:
A resposta do sistema para uma entrada exponencial $$ e^{s t} $$, é essa mesma entrada mudada de um fator A(s). Ou seja, ocorre uma mudança de amplitude.

De outra forma: quando a entrada é uma exponencial, a saída é a mesma exponencial multiplicada por um fator, A(s).
Notou a importância dos complexos como entrada de sistemas invariantes no tempo (LIT)?

A(s) é chamado de autovalor e o sinal é uma autofunção do sistema.
Conclusão importante: exponenciais complexas são autofunções de sistemas do tipo LIT.

Analogamente, para o caso discreto:
$$ x[n] = z^n $$

Definição de convolução:
$$ y[n] = \sum_{k=-\infty}^{k=+\infty}h[k] x[n - k] $$

Substituindo os valores:
$$ y[n] = \sum_{k=-\infty}^{k=+\infty}h[k] z^{n - k} $$

$$ y[n] = \sum_{k=-\infty}^{k=+\infty}h[k] z^{n - k} $$

$$ y[n] = \sum_{k=-\infty}^{k=+\infty}h[k] z^n z^{ - k} $$

$$ y[n] = z^n \sum_{k=-\infty}^{k=+\infty}h[k] z^{-k} $$

Autovalor no caso discreto:
$$ A[z] = \sum_{k=-\infty}^{k=+\infty}h[k] z^{-k} $$

Introdução: utilidade das séries de Fourier

  • O que veremos nessa seção

A convolução, que nada mais é que uma soma que representa os sinais por meio da combinação linear de impulsos é um meio de representar sinais.
Com as séries de Fourier, veremos outros métodos de representar os sinais. Ou seja, é uma outra abordagem.


A base dessa nova visão continuará sendo a soma (lembre-se que integral também é uma soma, mas uma soma de partes infinitesimal), mas os sinais básicos que mais usaremos serão os exponenciais complexos.

Por hora, para conta do efeito de facilidade e entendimento, trataremos de sinais periódicos e de tempo discreto, que são as série de Fourier.

  • Representar, representação, modo de ver...


Já reparou nisso? Por que se fala tanto em representar? Por que e para que outro modo de ver?
Muito simples: os fenômenos reais, do nosso dia a dia, são muito complexos.

O objetivo das ciências exatas é criar conceitos (como o de trigonometria e números complexos), e analisar os fenômenos reais e complexos através desses conceitos mais simples.
Ou seja, vamos pegar uma coisa complicada, e representar de uma maneira simples, de uma maneira que possamos entender, manusear e prever resultados.

Usaremos trigonometria, séries, periodicidade e números complexos para estudar e manipular os sinais da vida real, como verão.
Isso, na Física, já é um velho costume. E no nossa caso, Série de Fourier, foi estudo vários cientistas, como Bernoulli, Euler, Dirichlet e Fourier.

O nome do assunto se refere ao Fourier por ele ter sido o grande 'divulgador' pro trás da ideia de que um sinal periódico poderia ser representado por séries senoidais harmônicas.
Veja bem, não foi ideia dele e nem ele que provou isso ao pé da letra.
Mas sem dúvida, ele foi o mais envolvido. Na verdade, são poucos os casos em que um ser humano desenvolve algo de tamanha importância de maneira completa e sozinho.

O impacto do trabalho de Fourier foi tão grande, que é um dos mais usados em Física, Química, Matemática e quase todas as engenharias.
Sendo usado inclusive na modelagem de movimentos planetários, climatologia da terra e oceanografia.
Ao final dos estudos da série de Fourier, você terá uma ferramenta poderosa para fazer a análise e descrição dos mais diversos tipos de sinais.