Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save elias19r/8f7fc2978a09af074e6337e159931e09 to your computer and use it in GitHub Desktop.
Save elias19r/8f7fc2978a09af074e6337e159931e09 to your computer and use it in GitHub Desktop.
language title date
pt-br
Indução matemática com fórmula de juros composto
2017-12-02

Como um exercício de hipótese de indução, geralmente tenta-se encontrar a "fórmula fechada" correspondente a uma dada fórmula recursiva. Aqui vamos fazê-lo usando como exemplo o cálculo de juros composto.

Fórmula Recursiva

Sejam,

  • $j$: taxa de juros mensal e $J = 1 + j$
  • $I$: valor inicial
  • $A$: aporte depositado mensalmente
  • $m$: quantidade de meses
  • $F_m$: total acumulado até o mês $m$

A fórmula recursiva é dada por:

$$\left \{ \begin{align*} F_0 &= I \\\ F_m &= A + J \cdot F_{m-1} \text{ , } m \geq 1 \end{align*} \right .$$

Por exemplo, suponha uma taxa de juros $j = 0,5% = 0,005$, um valor inicial $I = 100$ e um depósito mensal $A = 200$. Temos inicialmente:

$$F_0 = I = 100$$

E no primeiro mês, $m = 1$:

$$\begin{align*} F_1 &= A + J \cdot F_{1-1} \\\ &= A + (1 + j) \cdot F_0 \\\ &= 200 + 1,005 \cdot 100 \\\ &= 300,5 \end{align*}$$

E no segundo mês, $m = 2$:

$$\begin{align*} F_2 &= A + J \cdot F_{2-1} \\\ &= A + (1 + j) \cdot F_1 \\\ &= 200 + 1,005 \cdot 300,5 \\\ &= 502,0025 \end{align*}$$

E assim por diante a cada mês...

Hipótese de Indução

Dessa maneira, quando queremos calcular o total acumulado para um $m = k$ meses, temos que fazer todas as contas até chegar em $F_k$. Ao invés disso, podemos descobrir uma fórmula fechada, sem recursão, para calcular diretamente esse valor.

Primeiramente, precisamos tentar enxergar um padrão nessas contas e propor uma hipótese. E então, testamos nossa hipótese para verificar se ela é de fato válida.

Vamos calcular até $F_3$ algebricamente:

$$\begin{align*} F_0 &= I \\\ \\\ F_1 &= A + J \cdot F_0 \\\ &= A + J I \\\ \\\ F_2 &= A + J \cdot F_1 \\\ &= A + J \left[ A + J I \right] \\\ &= A + JA + J^2 I \\\ &= A(1 + J) + J^2 I \\\ \\\ F_3 &= A + J \cdot F_2 \\\ &= A + J \left[ A(1 + J) + J^2 I \right] \\\ &= A + A(J + J^2) + J^3 I \\\ &= A(1 + J + J^2) + J^3 I \end{align*}$$

Observando atentamente e rescrevendo $F_1$, $F_2$ e $F_3$:

$$\begin{align*} F_1 &= A + J I \\\ &= A(J^0) + J^1 I \\\ \\\ F_2 &= A(1 + J) + J^2 I \\\ &= A(J^0 + J^1) + J^2 I \\\ \\\ F_3 &= A(1 + J + J^2) + J^3 I \\\ &= A(J^0 + J^1 +J^2) + J^3 I \end{align*}$$

Podemos propor a seguinte hipótese $H_m$:

$$H_m = A(J^0 + J^1 + \ldots + J^{m-1}) + J^m I$$

Mas note que o fator que $A$ multiplica não é uma soma qualquer. Trata-se da soma dos $m$ termos de uma progressão geométrica, com primeiro termo igual a $J^0$ e com razão igual a $J$, para a qual já é conhecida uma fórmula reduzida:

$$J^0 + J^1 + \ldots + J^{m-1} = \frac{J^0(J^m - 1)}{J - 1} = \frac{J^m - 1}{J - 1} \text{ , } J \neq 1$$

E para $J = 1$, temos o fator:

$$1^0 + 1^1 + \ldots + 1^{m-1} = 1 + 1 + \ldots + 1 \text{ (} m \text{ vezes)}$$

Assim, nossa hipótese fica:

$$H_m = \left \{ \begin{align*} & A \cdot m + I & \text{ , } J = 1 \\\ & A \left( \frac{J^m - 1}{J - 1} \right) + J^m I & \text{ , } J \neq 1 \end{align*} \right .$$

Verificação

Para que nossa hipótese seja de fato válida, precisamos:

  • Testá-la para o caso base da função recursiva ($F_0$);
  • E supondo que $H_m$ vale para $m = k$, testá-la para $m = k + 1$.

Caso base $F_0$, $m = 0$

Para $J = 1$:

$$\begin{align*} H_0 &= A \cdot 0 + I \\\ &= I \\\ &= F_0 \end{align*}$$

Para $J \neq 1$:

$$\begin{align*} H_0 &= A \left( \frac{J^0 - 1}{J - 1} \right) + J^0 I \\\ &= A \left( \frac{1 - 1}{J - 1} \right) + I \\\ &= A \left( \frac{0}{J - 1} \right) + I \\\ &= I \\\ &= F_0 \end{align*}$$

Portanto válida.

Caso $m = k + 1$

Supondo que $H_k = F_k$ vale, queremos verificar $H_{k+1}$:

$$H_{k+1} = \left \{ \begin{align*} & A \cdot (k+1) + I & \text{ , } J = 1 \\\ & A \left( \frac{J^{k+1} - 1}{J - 1} \right) + J^{k+1} I & \text{ , } J \neq 1 \end{align*} \right .$$

Para $J = 1$:

$$\begin{align*} H_{k+1} &= A \cdot (k+1) + I \\\ &= A \cdot k + A + I \\\ &= J A \cdot k + A + J I \\\ &= A + J \left[ A \cdot k + I \right] \\\ &= A + J \cdot H_k \\\ &= A + J \cdot F_k \\\ &= F_{k+1} \end{align*}$$

Para $J \neq 1$:

Somando e subtraindo $A$ ao lado direito, a igualdade se mantém, então:

$$H_{k+1} = (A - A) + A \left( \frac{J^{k+1} - 1}{J - 1} \right) + J^{k+1} I$$

E agora manipulando algebricamente, temos:

$$\begin{align*} H_{k+1} &= A + A \left( \frac{J^{k+1} - 1}{J - 1} - 1 \right) + J^{k+1} I \\\ &= A + A \left( \frac{J^{k+1} - 1 - (J - 1)}{J - 1} \right) + J^{k+1} I \\\ &= A + A \left( \frac{J^{k+1} - J}{J - 1} \right) + J^{k+1} I \\\ &= A + J A \left( \frac{J^k - 1}{J - 1} \right) + J^{k+1} I \\\ &= A + J A \left( \frac{J^k - 1}{J - 1} \right) + J J^k I \\\ &= A + J \left[ A \left ( \frac{J^k - 1}{J - 1} \right) + J^k I \right] \\\ &= A + J \cdot H_k \\\ &= A + J \cdot F_k \\\ &= F_{k+1} \end{align*}$$

Portanto válida.

Conclusão: fórmula fechada

Por indução matemática, temos que a fórmula fechada para a fórmula recursiva de juros composto apresentada, substituindo $J = 1 + j$, é:

$$F_m = \left \{ \begin{align*} & A \cdot m + I & \text{ , } j = 0 \\\ & A \left( \frac{(1+j)^m - 1}{j} \right) + (1+j)^m I & \text{ , } j \neq 0 \end{align*} \right .$$

Implementação

<form lang="pt" style="font-family: monospace;">
  <p>
    j =
    <input
      oninput="calc();"
      id="j"
      type="number"
      step="0.0001"
      style="width: 8em;"
      value="0.005"
    />
    <small
      >Obs: <span id="j_raw">0,005</span> =
      <span id="j_percent">0,5%</span></small
    ><br />
    I =
    <input
      oninput="calc();"
      id="I"
      type="number"
      step="0.01"
      style="width: 8em;"
      value="100"
    /><br />
    A =
    <input
      oninput="calc();"
      id="A"
      type="number"
      step="0.01"
      style="width: 8em;"
      value="200"
    /><br />
    m =
    <input
      oninput="calc();"
      id="m"
      type="number"
      step="1"
      min="0"
      style="width: 4em;"
      value="2"
    />
  </p>
  <p>F_m = <span id="Fm"></span></p>
</form>
<script>
  // F calcula o total acumulado durante m meses com uma taxa de juros mensal j,
  // um valor inicial I e um aporte mensal A.
  function F(j, I, A, m) {
    if (j == 0) {
      // Ou o tanto próximo de zero quanto queira.
      return A * m + I;
    }
    var Jm = Math.pow(1 + j, m);
    return (A * (Jm - 1)) / j + Jm * I;
  }

  function calc() {
    // Pega valores.
    var j = document.getElementById("j").valueAsNumber;
    var I = document.getElementById("I").valueAsNumber;
    var A = document.getElementById("A").valueAsNumber;
    var m = document.getElementById("m").valueAsNumber;

    // Valida taxa de juros mensal.
    if (isNaN(j)) {
      j = 0;
    }
    // Valida valor inicial.
    if (isNaN(I)) {
      I = 0;
    }
    // Valida aporte mensal.
    if (isNaN(A)) {
      A = 0;
    }
    // Valida meses.
    if (isNaN(m)) {
      m = 0;
    } else if (m < 0) {
      m = 0;
      document.getElementById("m").value = "0";
    }

    // Mostra rótulo com observação sobre porcentagem.
    var j_percent = j * 100;
    document.getElementById("j_raw").innerHTML = j.toLocaleString("pt", {
      maximumFractionDigits: 4,
    });
    document.getElementById("j_percent").innerHTML =
      j_percent.toLocaleString("pt", { maximumFractionDigits: 2 }) + "%";

    // Mostra resultado da F()
    var Fm = F(j, I, A, m).toLocaleString("pt", { maximumFractionDigits: 4 });
    document.getElementById("Fm").innerHTML = Fm;
  }

  calc();
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment