Math ClubMath Club
v1 · padrão canônico

Variedades Diferenciáveis

Conceito de variedade diferenciável, atlas e cartas, funções suaves entre variedades, espaço tangente, fibrado tangente, imersões e submersões, variedades com fronteira.

Used in: engenharia

Choose your door

Variedades: Superfícies Generalizadas

Uma variedade é um espaço que localmente "parece" com o espaço euclideano. A superfície da Terra é uma variedade 2-dimensional: em cada ponto, uma região suficientemente pequena pode ser mapeada num pedaço plano (como um mapa geográfico).

A diferença é que as coordenadas locais (mapas) podem não cobrir o espaço inteiro — precisamos de vários mapas sobrepostos (um atlas). A condição de "diferenciabilidade" exige que as transições entre mapas sejam suaves.

Exemplos de variedades: a esfera S², o toro T², grupos de Lie como SO(3) (rotações 3D), o espaço de configurações de robôs articulados.

Choose your door

Espaço Tangente e Fibrado Tangente

Vetores Tangentes

Definição via derivações: Um vetor tangente em pMp \in M é uma derivação v:C(M)Rv: C^\infty(M) \to \mathbb{R} — aplicação linear satisfazendo a regra de Leibniz:

v(fg)=f(p)v(g)+g(p)v(f)v(fg) = f(p)v(g) + g(p)v(f)

Em coordenadas locais (x1,,xn)(x^1,\ldots,x^n) ao redor de p, os vetores /xip\partial/\partial x^i|_p formam uma base de TpMT_pM:

v=vixip,vi=v(xi)v = v^i \frac{\partial}{\partial x^i}\bigg|_p, \quad v^i = v(x^i)

(Fonte: Lee §3; Carroll §2.3)

Diferencial e Pullback

Para f:MNf: M \to N suave, o diferencial (pushforward):

dfp=f:TpMTf(p)N,(fv)(g)=v(gf)df_p = f_*: T_pM \to T_{f(p)}N, \quad (f_*v)(g) = v(g\circ f)

Em coordenadas: (fv)i=fixjvj(f_*v)^i = \frac{\partial f^i}{\partial x^j}v^j (Jacobiano!).

Para 1-formas, o pullback f:Tf(p)NTpMf^*: T^*_{f(p)}N \to T^*_p M:

(fω)p(v)=ωf(p)(fv)(f^*\omega)_p(v) = \omega_{f(p)}(f_*v)

(Fonte: Lee §3; do Carmo, Riemannian Geometry §0)

Fibrado Tangente

O fibrado tangente é:

TM=pMTpMTM = \bigsqcup_{p \in M} T_pM

com estrutura de variedade 2n-dimensional. A projeção π:TMM\pi: TM \to M envia (p,v)p(p,v) \mapsto p.

Um campo vetorial é uma seção X:MTMX: M \to TM com πX=idM\pi \circ X = \text{id}_M.

Colchete de Lie: Para campos X, Y:

[X,Y](f)=X(Y(f))Y(X(f))[X, Y](f) = X(Y(f)) - Y(X(f))

(Fonte: Lee §8; Carroll §2)

Choose your door

Real scenarios with market data and step-by-step calculations

Implementação: Projeção Estereográfica da Esfera S²

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# ── Projeção estereográfica S² → ℝ² ─────────────────────
# Do polo norte N = (0,0,1): p = (x,y,z) → (X,Y)
def proj_norte(x, y, z):
    """Projeção estereográfica do polo norte."""
    denom = 1 - z
    return x / denom, y / denom

def proj_sul(x, y, z):
    """Projeção estereográfica do polo sul."""
    denom = 1 + z
    return x / denom, y / denom

def inv_norte(X, Y):
    """Inversa da projeção do polo norte."""
    denom = 1 + X**2 + Y**2
    return 2*X/denom, 2*Y/denom, (X**2+Y**2-1)/denom

# ── Verificar que a mudança de cartas é C^∞ ───────────────
# Composição: φ_sul ∘ φ_norte^{-1}: ℝ²\{0} → ℝ²\{0}
# (X,Y) → ponto na esfera → (X',Y')
def mudanca_cartas(X, Y):
    """Mudança de cartas: norte → sul. Deve ser X'=X/(X²+Y²), etc."""
    x, y, z = inv_norte(X, Y)
    return proj_sul(x, y, z)

# Verificar: para (X,Y) = (1,1)
X0, Y0 = 1.0, 1.0
Xp, Yp = mudanca_cartas(X0, Y0)
r_sq = X0**2 + Y0**2
print(f"Mudança de cartas em (1,1):")
print(f"  Resultado: ({Xp:.4f}, {Yp:.4f})")
print(f"  Esperado: ({X0/r_sq:.4f}, {Y0/r_sq:.4f})")
print(f"  Fórmula: (X,Y) → (X/(X²+Y²), Y/(X²+Y²)) — inversão no círculo")

# ── Visualização: Atlas da esfera ─────────────────────────
fig = plt.figure(figsize=(14, 5))

# Esfera com meridionais e paralelos
ax1 = fig.add_subplot(131, projection='3d')
u = np.linspace(0, 2*np.pi, 50)
v = np.linspace(0, np.pi, 25)
xs = np.outer(np.cos(u), np.sin(v))
ys = np.outer(np.sin(u), np.sin(v))
zs = np.outer(np.ones(u.shape), np.cos(v))
ax1.plot_surface(xs, ys, zs, alpha=0.3, color='lightblue')
ax1.set_title('S² (esfera)')

# Projeção do polo norte
ax2 = fig.add_subplot(132)
phi_vals = np.linspace(0, 2*np.pi, 200)
for theta in [np.pi/6, np.pi/3, np.pi/2, 2*np.pi/3, 5*np.pi/6]:
    x_sph = np.sin(theta) * np.cos(phi_vals)
    y_sph = np.sin(theta) * np.sin(phi_vals)
    z_sph = np.cos(theta) * np.ones_like(phi_vals)
    # Não plotar perto do polo norte (z~1)
    mask = z_sph < 0.95
    if mask.sum() > 0:
        Xp, Yp = proj_norte(x_sph[mask], y_sph[mask], z_sph[mask])
        ax2.plot(Xp, Yp, 'b-', lw=0.8, alpha=0.7)
ax2.set_xlim(-5, 5); ax2.set_ylim(-5, 5)
ax2.set_title('Carta Norte: S²\\{N} → ℝ²')
ax2.grid(True, alpha=0.3); ax2.set_aspect('equal')

# Projeção do polo sul
ax3 = fig.add_subplot(133)
for theta in [np.pi/6, np.pi/3, np.pi/2, 2*np.pi/3, 5*np.pi/6]:
    x_sph = np.sin(theta) * np.cos(phi_vals)
    y_sph = np.sin(theta) * np.sin(phi_vals)
    z_sph = np.cos(theta) * np.ones_like(phi_vals)
    mask = z_sph > -0.95
    if mask.sum() > 0:
        Xp, Yp = proj_sul(x_sph[mask], y_sph[mask], z_sph[mask])
        ax3.plot(Xp, Yp, 'r-', lw=0.8, alpha=0.7)
ax3.set_xlim(-5, 5); ax3.set_ylim(-5, 5)
ax3.set_title('Carta Sul: S²\\{S} → ℝ²')
ax3.grid(True, alpha=0.3); ax3.set_aspect('equal')

plt.tight_layout()
plt.savefig('atlas_esfera.png', dpi=150)
print("\nFigura salva: atlas_esfera.png")

# ── SO(3): Fórmula de Rodrigues ────────────────────────────
print("\n── Fórmula de Rodrigues (SO(3)) ──")
def rodrigues(omega, theta):
    """Rotação de ângulo theta em torno do eixo omega (unitário)."""
    omega = omega / np.linalg.norm(omega)
    wx, wy, wz = omega
    K = np.array([[0, -wz, wy],
                  [wz, 0, -wx],
                  [-wy, wx, 0]])  # Matriz antisimétrica de omega
    return np.eye(3) + np.sin(theta)*K + (1-np.cos(theta))*K@K

# Rotação de 90° em torno do eixo z
R = rodrigues([0, 0, 1], np.pi/2)
print("Rotação 90° em torno de z:")
print(np.round(R, 4))
v_test = np.array([1, 0, 0])
print(f"R * (1,0,0) = {np.round(R @ v_test, 4)} (deve ser (0,1,0))")

# Verificar R^T R = I e det R = 1
print(f"R^T R = \n{np.round(R.T @ R, 10)}")
print(f"det(R) = {np.linalg.det(R):.6f}")

Saída esperada:

Mudança de cartas em (1,1):
  Resultado: (0.5000, 0.5000)
  Esperado:  (0.5000, 0.5000)
  Fórmula: (X,Y) → (X/(X²+Y²), Y/(X²+Y²)) — inversão no círculo

Rotação 90° em torno de z:
[[ 0. -1.  0.]
 [ 1.  0.  0.]
 [ 0.  0.  1.]]
R * (1,0,0) = [0. 1. 0.] (deve ser (0,1,0))
det(R) = 1.000000

(Fonte: Lee §1 — atlas da esfera; Goldstein §4.5 — Rodrigues)

To continue

Referências Bibliográficas

  • Lee, J.M. Introduction to Smooth Manifolds, 2ª ed. Springer, 2013. A referência principal moderna: completo, rigoroso e bem escrito.
  • do Carmo, M.P. Riemannian Geometry. Birkhäuser, 1992. §0 (manifolds, maps). Introdução clássica.
  • Spivak, M. A Comprehensive Introduction to Differential Geometry, Vol. I, 3ª ed. Publish or Perish, 1999. Tratamento mais detalhado.
  • Warner, F.W. Foundations of Differentiable Manifolds and Lie Groups. Springer, 1983. Abordagem funcional-analítica.
  • Hirsch, M.W. Differential Topology. Springer, 1976. Teorema de Sard, Whitney — com provas completas.
  • Carroll, S. Spacetime and Geometry. Addison-Wesley, 2004. §2 (variedades em relatividade geral).
  • Misner, C.W.; Thorne, K.S.; Wheeler, J.A. Gravitation. §9 (variedades diferenciáveis).
  • Hatcher, A. Algebraic Topology. Cambridge, 2002. §§2.2–2.3 (orientação, homologia). Disponível livremente no site do autor.
  • Hall, B. Lie Groups, Lie Algebras, and Representations, 2ª ed. Springer, 2015. §1 (grupos de Lie e SU(2)).
  • Spong, M.W. et al. Robot Modeling and Control. Wiley, 2005. §§2–3 (SO(3), espaços de configuração em robótica).

Updated on 2026-05-29 · Author(s): Clube da Matemática

Found an error? Open an issue on GitHub or submit a PR — open source forever.