Visualización 1 — Área bajo
Vamos a comenzar con una función muy sencilla: .
Para cada valor de , acumulamos el área bajo la curva desde hasta . Esa acumulación se convierte en una nueva función que, como vimos en clase, se puede calcular exactamente:
Como pueden ver, esta función acumulada es un polinomio cuadrático. La visualización siguiente les permitirá mover el valor de y observar cómo cambia el valor de , y qué área está acumulando esa función.
import numpy as np
import matplotlib.pyplot as plt
from ipywidgets import interact, FloatSlider
# Función f(t) = t
def f(t):
return t
# Dominio de integración
a = -5
b = 5
x_vals = np.linspace(a, b, 500)
# Función acumulada: F(x) = ∫_a^x t dt = (1/2)(x^2 - a^2)
def F(x):
return 0.5 * (x**2 - a**2)
# Función para graficar
def plot_tfc_part1(x):
fig, axs = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico 1: Área bajo f(t) = t desde a hasta x
t_vals = np.linspace(a, b, 500)
axs[0].plot(t_vals, f(t_vals), label=r'$f(t) = t$', color='blue')
t_fill = np.linspace(a, x, 300)
axs[0].fill_between(t_fill, 0, f(t_fill), color='lightblue', alpha=0.6)
axs[0].axvline(x, color='gray', linestyle='--')
axs[0].set_title(r'Área bajo $f(t) = t$ desde $a$ hasta $x$')
axs[0].set_xlabel('t')
axs[0].set_ylabel('f(t)')
axs[0].legend()
axs[0].grid(True)
axs[0].set_xlim(a, b)
# Gráfico 2: F(x) y su recta tangente en x
axs[1].plot(x_vals, F(x_vals), label=r'$F(x) = \int_{-5}^x t\,dt$', color='green')
axs[1].scatter([x], [F(x)], color='red', zorder=5, label=r'$F(x)$')
# Recta tangente en x: pendiente = f(x) = x
slope = f(x)
x_tangent = np.linspace(x - 1, x + 1, 100)
y_tangent = F(x) + slope * (x_tangent - x)
axs[1].plot(x_tangent, y_tangent, '--', color='orange', label='Tangente en $x$')
axs[1].axvline(x, color='gray', linestyle='--')
axs[1].set_title(r'Función $F(x)$ y su tangente')
axs[1].set_xlabel('x')
axs[1].set_ylabel('F(x)')
axs[1].legend()
axs[1].grid(True)
axs[1].set_xlim(a, b)
plt.tight_layout()
plt.show()
# Mostrar valores numéricos
print(f"Área bajo la curva f(t)=t entre {a} y {x:.2f}: {F(x):.4f}")
print(f"Valor de F({x:.2f}) = {F(x):.4f}")
# Llamada interactiva
interact(plot_tfc_part1, x=FloatSlider(value=0.0, min=a, max=b, step=0.1, description='x'))¿Qué observar en las gráficas?
- A medida que aumenta , el área acumulada bajo la curva también aumenta, y eso se refleja en el valor de .
- La pendiente de la recta tangente a la gráfica de es exactamente igual al valor de en ese punto.
- Si se dan cuenta, no estamos calculando ninguna derivada ni ninguna integral en el código — simplemente estamos rellenando el área bajo la curva con
fill_between, y graficando cómo eso se convierte en una nueva función. ¡Y eso es precisamente lo que es una integral!
Visualización 2 — Área bajo
Ahora vamos a observar una función que ya conocen bien: . La función acumulada que se genera al integrar desde hasta es:
Lo interesante de esta función es que la pendiente de la tangente en puede ser positiva, negativa o incluso cero. Esto nos ayuda a visualizar con claridad cómo la pendiente depende directamente del valor de .
import numpy as np
import matplotlib.pyplot as plt
from ipywidgets import interact, FloatSlider
# Función f(t) = cos(t)
def f(t):
return np.cos(t)
# Dominio de integración
a = 0
b = 2 * np.pi
x_vals = np.linspace(a, b, 500)
# Función acumulada: F(x) = ∫_a^x cos(t) dt = sin(x) - sin(a)
def F(x):
return np.sin(x) - np.sin(a)
# Función de graficado
def plot_tfc_cos(x):
fig, axs = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico 1: Área bajo f(t) = cos(t) desde a hasta x
t_vals = np.linspace(a, b, 500)
axs[0].plot(t_vals, f(t_vals), label=r'$f(t) = \cos(t)$', color='blue')
t_fill = np.linspace(a, x, 300)
axs[0].fill_between(t_fill, 0, f(t_fill), color='lightblue', alpha=0.6)
axs[0].axvline(x, color='gray', linestyle='--')
axs[0].set_title(r'Área bajo $f(t) = \cos(t)$ desde $0$ hasta $x$')
axs[0].set_xlabel('t')
axs[0].set_ylabel('f(t)')
axs[0].legend()
axs[0].grid(True)
axs[0].set_xlim(a, b)
# Gráfico 2: F(x) = sin(x), con tangente
axs[1].plot(x_vals, F(x_vals), label=r'$F(x) = \int_0^x \cos(t)\,dt$', color='green')
axs[1].scatter([x], [F(x)], color='red', zorder=5, label=r'$F(x)$')
# Recta tangente en x: pendiente = cos(x)
slope = f(x)
x_tangent = np.linspace(x - 0.5, x + 0.5, 100)
y_tangent = F(x) + slope * (x_tangent - x)
axs[1].plot(x_tangent, y_tangent, '--', color='orange', label='Tangente en $x$')
axs[1].axvline(x, color='gray', linestyle='--')
axs[1].set_title(r'Función $F(x)$ y su tangente')
axs[1].set_xlabel('x')
axs[1].set_ylabel('F(x)')
axs[1].legend()
axs[1].grid(True)
axs[1].set_xlim(a, b)
plt.tight_layout()
plt.show()
# Mostrar valores numéricos
print(f"Área bajo la curva f(t)=cos(t) entre 0 y {x:.2f}: {F(x):.4f}")
print(f"Valor de F({x:.2f}) = {F(x):.4f}")
# Llamada interactiva
interact(plot_tfc_cos, x=FloatSlider(value=np.pi, min=a, max=b, step=0.1, description='x'))¿Qué observar en las gráficas?
- El valor de crece cuando , y decrece cuando .
- En los puntos donde , la tangente es horizontal — esto ocurre, por ejemplo, en y .
- Esto refuerza la idea de que la pendiente de está completamente determinada por el valor de la función original .
Visualización 3 — Área bajo
Ahora vamos a observar una función que crece de manera exponencial: .
La función acumulada desde hasta es:
Como siempre es positiva y creciente, podemos esperar que también crezca y que su pendiente aumente cada vez más rápido.
import numpy as np
import matplotlib.pyplot as plt
from ipywidgets import interact, FloatSlider
# Función f(t) = e^t
def f(t):
return np.exp(t)
# Dominio de integración
a = -1
b = 3
x_vals = np.linspace(a, b, 500)
# Función acumulada: F(x) = ∫_a^x e^t dt = e^x - e^a
def F(x):
return np.exp(x) - np.exp(a)
# Función de graficado
def plot_tfc_exp(x):
fig, axs = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico 1: Área bajo f(t) = e^t desde a hasta x
t_vals = np.linspace(a, b, 500)
axs[0].plot(t_vals, f(t_vals), label=r'$f(t) = e^t$', color='blue')
t_fill = np.linspace(a, x, 300)
axs[0].fill_between(t_fill, 0, f(t_fill), color='lightblue', alpha=0.6)
axs[0].axvline(x, color='gray', linestyle='--')
axs[0].set_title(r'Área bajo $f(t) = e^t$ desde $-1$ hasta $x$')
axs[0].set_xlabel('t')
axs[0].set_ylabel('f(t)')
axs[0].legend()
axs[0].grid(True)
axs[0].set_xlim(a, b)
# Gráfico 2: F(x) = e^x - e^{-1}, con tangente
axs[1].plot(x_vals, F(x_vals), label=r'$F(x) = \int_{-1}^x e^t\,dt$', color='green')
axs[1].scatter([x], [F(x)], color='red', zorder=5, label=r'$F(x)$')
# Recta tangente en x: pendiente = f(x) = e^x
slope = f(x)
x_tangent = np.linspace(x - 0.5, x + 0.5, 100)
y_tangent = F(x) + slope * (x_tangent - x)
axs[1].plot(x_tangent, y_tangent, '--', color='orange', label='Tangente en $x$')
axs[1].axvline(x, color='gray', linestyle='--')
axs[1].set_title(r'Función $F(x)$ y su tangente')
axs[1].set_xlabel('x')
axs[1].set_ylabel('F(x)')
axs[1].legend()
axs[1].grid(True)
axs[1].set_xlim(a, b)
plt.tight_layout()
plt.show()
# Mostrar valores numéricos
print(f"Área bajo la curva f(t)=e^t entre {a} y {x:.2f}: {F(x):.4f}")
print(f"Valor de F({x:.2f}) = {F(x):.4f}")
# Llamada interactiva
interact(plot_tfc_exp, x=FloatSlider(value=0.0, min=a, max=b, step=0.1, description='x'))¿Qué observar en las gráficas?
- La función crece rápidamente, y su pendiente (la tangente) también se hace cada vez más pronunciada.
- Esto se debe a que es una función creciente.
- Esta visualización resalta cómo el comportamiento de está totalmente guiado por .
Visualización 4 — Área bajo
En esta última visualización vamos a trabajar con , una función que tiene una forma muy particular: crece lentamente y nunca toca el eje horizontal.
La función acumulada desde hasta es:
Esta función es especialmente interesante porque el crecimiento de es logarítmico, y eso significa que aunque el área bajo la curva sigue aumentando, lo hace cada vez más lento.
import numpy as np
import matplotlib.pyplot as plt
from ipywidgets import interact, FloatSlider
# Función f(t) = 1/t
def f(t):
return 1 / t
# Dominio de integración
a = 0.1
b = 2
x_vals = np.linspace(a, b, 500)
# Función acumulada: F(x) = ln(x) - ln(a)
def F(x):
return np.log(x) - np.log(a)
# Función de graficado
def plot_tfc_log(x):
fig, axs = plt.subplots(1, 2, figsize=(14, 5))
# Gráfico 1: Área bajo f(t) = 1/t desde a hasta x
t_vals = np.linspace(a, b, 500)
axs[0].plot(t_vals, f(t_vals), label=r'$f(t) = \frac{1}{t}$', color='blue')
t_fill = np.linspace(a, x, 300)
axs[0].fill_between(t_fill, 0, f(t_fill), color='lightblue', alpha=0.6)
axs[0].axvline(x, color='gray', linestyle='--')
axs[0].set_title(r'Área bajo $f(t) = \frac{1}{t}$ desde $0.1$ hasta $x$')
axs[0].set_xlabel('t')
axs[0].set_ylabel('f(t)')
axs[0].legend()
axs[0].grid(True)
axs[0].set_xlim(a, b)
# Gráfico 2: F(x) = ln(x) - ln(a), con tangente
axs[1].plot(x_vals, F(x_vals), label=r'$F(x) = \int_{0.1}^x \frac{1}{t} \, dt$', color='green')
axs[1].scatter([x], [F(x)], color='red', zorder=5, label=r'$F(x)$')
# Recta tangente en x: pendiente = 1/x
slope = f(x)
x_tangent = np.linspace(max(x - 0.2, a), min(x + 0.2, b), 100)
y_tangent = F(x) + slope * (x_tangent - x)
axs[1].plot(x_tangent, y_tangent, '--', color='orange', label='Tangente en $x$')
axs[1].axvline(x, color='gray', linestyle='--')
axs[1].set_title(r'Función $F(x)$ y su tangente')
axs[1].set_xlabel('x')
axs[1].set_ylabel('F(x)')
axs[1].legend()
axs[1].grid(True)
axs[1].set_xlim(a, b)
plt.tight_layout()
plt.show()
# Mostrar valores numéricos
print(f"Área bajo la curva f(t)=1/t entre {a} y {x:.2f}: {F(x):.4f}")
print(f"Valor de F({x:.2f}) = {F(x):.4f}")
# Llamada interactiva
interact(plot_tfc_log, x=FloatSlider(value=1.0, min=a, max=b, step=0.01, description='x'))¿Qué observar en las gráficas?
- Aunque decrece, su área acumulada sigue aumentando — pero cada vez más lentamente.
- La curva de se aplana progresivamente, mostrando cómo el crecimiento de es mucho más lento que el de una función polinómica o exponencial.
- Esta visualización es útil para ver cómo el comportamiento de impacta directamente la forma de la curva acumulada .