Otimização de Embalagens

Uma indústria de Campo Mourão utiliza chapas retangulares de \(12 \text{ cm} \times 8 \text{ cm}\) para fabricar caixas sem tampa. Para isso, são retirados quadrados de lado \(x\) nos quatro cantos da chapa, e as abas resultantes são dobradas para formar a caixa.

O objetivo é determinar o valor de \(x\) que produz o maior volume interno possível. Esse problema constitui uma aplicação clássica de Cálculo Diferencial em contextos de modelagem e otimização.

Instrução: Utilize o controle deslizante para variar o valor de \(x\).

Observe como o volume varia e identifique o ponto mais alto da curva, correspondente ao volume máximo da caixa.

Calculando Dimensões...

Lado do Corte (x)0.00 cm
Volume (V)0.00 cm³
Situação---

Resolução Matemática

1. Entendendo o Problema (Modelagem)

Imagine que você tem uma folha de metal de \(12 \text{ cm} \times 8 \text{ cm}\). Para transformá-la em uma caixa, você precisa cortar quatro quadrados iguais de lado \(x\) nos cantos e dobrar as abas para cima.

  • Comprimento final: era \(12\), mas tiramos \(x\) de cada lado \(\rightarrow (12 - 2x)\)
  • Largura final: era \(8\), mas tiramos \(x\) de cada lado \(\rightarrow (8 - 2x)\)
  • Altura da caixa: é exatamente o tamanho do corte \(x\).

O Volume (\(V(x)\)) é a multiplicação dessas três dimensões:

\[V(x) = (12 - 2x) \cdot (8 - 2x) \cdot x = \mathbf{4x^3 - 40x^2 + 96x}\]


2. Encontrando o Ponto Mais Alto (Primeira Derivada)

Na matemática, a Derivada (\(V'(x)\)) nos diz a inclinação da subida ou descida do gráfico. O ponto máximo de volume ocorre exatamente onde a curva para de subir e começa a descer — ou seja, onde a inclinação é zero.

\[V'(x) = 12x^2 - 80x + 96\]

Igualamos a zero e simplificamos (dividindo tudo por 4):

\[3x^2 - 20x + 24 = 0\]

3. Resolvendo a Equação (Bhaskara)

Usando a fórmula de Bhaskara, encontramos as raízes para \(x\):

\[x = \frac{20 \pm \sqrt{112}}{6} \rightarrow \sqrt{112} \approx 10,58\]

  • \(x_1 \approx 5,10 \text{ cm}\): (Impossível! Não podemos cortar \(5 \text{ cm}\) de cada lado se a largura total é apenas \(8 \text{ cm}\)).
  • \(\mathbf{x_2 \approx 1,57 \text{ cm}}\): Este é o nosso candidato a campeão!

4. Por que esse é o máximo? (Segunda Derivada)

A Segunda Derivada (\(V''(x)\)) nos diz a curvatura (concavidade) do gráfico:

  • Se \(V''(x)\) for positivo, a curva tem formato de "vale" (o ponto é um mínimo).
  • Se \(V''(x)\) for negativo, a curva tem formato de "montanha" (o ponto é um máximo).

Derivando novamente: \(V''(x) = 24x - 80\).
Substituindo nosso valor: \(V''(1,57) = 24(1,57) - 80 = \mathbf{-42,32}\)

Como o resultado é negativo, confirmamos fisicamente que este corte de \(1,57 \text{ cm}\) produz o maior volume possível para esta chapa!


Entendendo o Gráfico - Guia Completo

A interface acima apresenta duas visualizações importantes para entender o problema de otimização de volume. À esquerda, você vê a representação física da chapa sendo cortada; à direita, o gráfico matemático que mostra como o volume varia conforme o corte. Abaixo, explicamos detalhadamente cada elemento:

1. Diagrama de Corte (Esquerda)

O retângulo amarelo representa a chapa original de \(12 \text{ cm} \times 8 \text{ cm}\). Os quadrados vermelhos nos cantos indicam os cortes que serão feitos. A área verde-azulada central mostra a base da caixa após os cortes, com dimensões \((12 - 2x)\) por \((8 - 2x)\). O valor de \(x\) (tamanho do corte) é controlado pelo slider abaixo e afeta diretamente o tamanho dos quadrados vermelhos e da base verde.

2. Curva de Volume (Direita)

O gráfico da direita mostra a função Volume \(V(x)\) em azul. Esta curva representa como o volume da caixa muda conforme aumentamos o corte \(x\). O ponto vermelho se move sobre a curva, mostrando o volume atual para o valor de \(x\) selecionado. A linha tracejada laranja marca a posição do máximo teórico em \(x = 1,57 \text{ cm}\), que é o valor que você deve buscar.

3. Interpretação da Curva

A curva de volume tem um comportamento característico:

  • Para \(x\) pequeno (próximo de \(0\)): O volume é pequeno porque a altura da caixa é muito baixa.
  • Para \(x = 1,57 \text{ cm}\) (máximo): O volume atinge seu valor máximo, que é aproximadamente \(70,5 \text{ cm}^3\). Este é o ponto ideal!
  • Para \(x\) grande (próximo de \(4 \text{ cm}\)): O volume diminui porque as dimensões da base \((12-2x)\) e \((8-2x)\) ficam muito pequenas.
  • Limite máximo: \(x\) não pode ser maior que \(4 \text{ cm}\), pois a largura (\(8 \text{ cm}\)) se tornaria negativa.

4. Como Usar o Simulador

O slider abaixo do gráfico permite explorar diferentes valores de \(x\). Conforme você o move:

  • O diagrama da esquerda se atualiza, mostrando visualmente como a base e os cortes mudam.
  • O ponto vermelho no gráfico da direita se move, mostrando o volume correspondente.
  • Os cards informativos mostram o valor exato de \(x\) e o volume atual.
  • O status indica se você está abaixo do ótimo, no ótimo, ou acima do ótimo.
Dica Importante: Para encontrar a solução ótima, mova o slider até que o ponto vermelho no gráfico esteja exatamente no topo da curva azul, alinhado com a linha tracejada laranja. Você saberá que encontrou o máximo quando o status indicar "🏅 VOLUME ÓTIMO!" e o volume for aproximadamente \(70,5 \text{ cm}^3\).

5. Aplicação Prática

Este problema é uma aplicação clássica de otimização em engenharia de produção. Empresas que fabricam embalagens utilizam exatamente este princípio para maximizar o volume interno de caixas a partir de chapas de material, reduzindo desperdício e otimizando o uso de matéria-prima. O cálculo diferencial fornece a ferramenta matemática para encontrar a solução ideal sem precisar testar milhares de valores manualmente.

Este experimento demonstra como o Cálculo Diferencial se aplica a problemas reais da indústria, conectando a matemática teórica à prática de otimização de recursos.

packages = ["matplotlib", "numpy"] import matplotlib.pyplot as plt import matplotlib.patches as patches import numpy as np from pyscript import display from js import document def atualizar(event=None): # Limpa a div para evitar que os gráficos se acumulem document.getElementById("output_grafico").innerHTML = "" plt.close('all') x = float(document.getElementById("corte_slider").value) a, b = 12.0, 8.0 vol = (a - 2*x) * (b - 2*x) * x # Detectando tamanho da tela from js import window width = window.innerWidth # Criando a figura com tamanho adaptado if width <= 768: # Telas pequenas: figura mais alongada verticalmente fig = plt.figure(figsize=(8, 10), facecolor='white', dpi=100) ax1 = fig.add_subplot(2, 1, 1) ax2 = fig.add_subplot(2, 1, 2) else: # Telas grandes: lado a lado fig = plt.figure(figsize=(12, 5), facecolor='white', dpi=100) ax1 = fig.add_subplot(1, 2, 1) ax2 = fig.add_subplot(1, 2, 2) # --- ESQUERDA: Diagrama 2D --- ax1.add_patch(patches.Rectangle((0, 0), a, b, facecolor="#fff9c4", edgecolor="k", linewidth=1.5)) for p in [(0,0), (a-x,0), (0,b-x), (a-x,b-x)]: if p[0] >= 0 and p[1] >= 0 and p[0] + x <= a and p[1] + x <= b: ax1.add_patch(patches.Rectangle(p, x, x, facecolor="#ef9a9a", edgecolor="#b71c1c", ls="--", linewidth=1)) ax1.add_patch(patches.Rectangle((x, x), a-2*x, b-2*x, facecolor="#b2dfdb", alpha=0.7, ls="-", edgecolor="k", linewidth=1.5)) # Adicionando anotações de dimensões ax1.annotate(f'{a} cm', xy=(a/2, -0.5), ha='center', fontsize=8, color='#555') ax1.annotate(f'{b} cm', xy=(-0.8, b/2), ha='center', rotation=90, fontsize=8, color='#555') ax1.annotate(f'x = {x:.2f} cm', xy=(x/2, x/2), ha='center', va='center', fontsize=7, color='#b71c1c') ax1.set_xlim(-1, a+1) ax1.set_ylim(-1, b+1) ax1.set_aspect('equal') ax1.axis('off') ax1.set_title("Plano de Corte - Chapa Original", fontsize=10, fontweight='bold') # --- DIREITA: Gráfico Volume (corrigido para não distorcer) --- x_range = np.linspace(0, 4, 300) y_range = (a - 2*x_range) * (b - 2*x_range) * x_range # Garantindo que a proporção do gráfico seja mantida ax2.plot(x_range, y_range, color="#00796b", lw=2.5, label="Curva de Volume V(x)") # Ponto Vermelho que se move com o slider ax2.scatter(x, vol, color="#b71c1c", s=100, zorder=10, edgecolors='white', linewidth=2, label="Valor Atual") # Barra Laranja do Ótimo (Fixa em 1.57) ax2.axvline(1.57, color='#f57f17', ls='--', lw=2.5, alpha=0.8, label="Máximo Teórico (1.57 cm)") # Destacando o ponto ótimo na curva vol_otimo = (12 - 2*1.57) * (8 - 2*1.57) * 1.57 ax2.scatter(1.57, vol_otimo, color='#f57f17', s=120, zorder=10, edgecolors='black', linewidth=2, marker='*', label=f'Ótimo: {vol_otimo:.1f} cm³') ax2.set_title("Curva de Volume da Caixa", fontsize=11, fontweight='bold') ax2.set_xlabel("x - Tamanho do Corte (cm)", fontsize=9) ax2.set_ylabel("V - Volume (cm³)", fontsize=9) ax2.legend(fontsize=8, loc='upper right') ax2.grid(True, alpha=0.2) ax2.set_xlim(0, 4) ax2.set_ylim(0, 75) # Forçando a proporção igual para não distorcer a curva ax2.set_box_aspect(0.8) # Ajustando layout para melhor visualização plt.tight_layout() # Status e UI target_x = 1.57 document.getElementById("val-x").innerText = f"{x:.2f} cm" document.getElementById("val-v").innerText = f"{vol:.2f} cm³" status_el = document.getElementById("val-status") # CORREÇÃO: Tolerância apertada para não acusar acerto fora de 1.57 if abs(x - target_x) < 0.005: status_el.innerText = "🏅 VOLUME ÓTIMO!" status_el.style.color = "#1b5e20" elif x < target_x: status_el.innerText = "➡️ Aumente o corte (x muito pequeno)" status_el.style.color = "#f57f17" else: status_el.innerText = "⬇️ Volume caindo... (corte muito grande)" status_el.style.color = "#b71c1c" display(fig, target="#output_grafico") # Inicialização atualizar()