electrostatica-1
# =========================================
# POTENCIAL DE UNA CARGA PUNTUAL
# Visualización 2D y 3D
# =========================================
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# =========================
# MALLA
# =========================
N = 200
x = np.linspace(-2, 2, N)
y = np.linspace(-2, 2, N)
X, Y = np.meshgrid(x, y)
# =========================
# PARÁMETRO DE SUAVIZADO
# =========================
epsilon = 0.1
# =========================
# CARGA
# =========================
q = 1.0
x0 = 0.0
y0 = 0.0
R = np.sqrt((X - x0)**2 + (Y - y0)**2 + epsilon**2)
phi = q / R
# =========================
# GRÁFICA 2D
# =========================
plt.figure(figsize=(6,5))
pcm = plt.pcolormesh(X, Y, phi, shading='auto', cmap='viridis')
plt.contour(X, Y, phi, levels=10, colors='white')
plt.colorbar(pcm, label='Potencial')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Potencial 2D')
plt.axis('equal')
plt.savefig("potencial_2D.png", dpi=300)
plt.show()
# =========================
# GRÁFICA 3D
# =========================
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(X, Y, phi, cmap='viridis')
fig.colorbar(surf, shrink=0.6)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('Potencial')
ax.set_title('Superficie 3D del potencial')
plt.savefig("potencial_3D.png", dpi=300)
plt.show()
electrostatica-3
import numpy as np
import matplotlib.pyplot as plt
N = 200
x = np.linspace(-2, 2, N)
y = np.linspace(-2, 2, N)
X, Y = np.meshgrid(x, y)
epsilon = 0.1
q = 1.0
x0 = 0.0
y0 = 0.0
R = np.sqrt((X - x0)**2 + (Y - y0)**2 + epsilon**2)
phi = q / R
dx = x[1] - x[0]
dy = y[1] - y[0]
dphidy, dphidx = np.gradient(phi, dy, dx)
Ex = -dphidx
Ey = -dphidy
plt.figure(figsize=(6,5))
pcm = plt.pcolormesh(X, Y, phi,
shading='auto',
cmap='viridis')
plt.contour(X, Y, phi,
levels=10,
colors='white')
step = 8
plt.quiver(X[::step, ::step],
Y[::step, ::step],
Ex[::step, ::step],
Ey[::step, ::step],
color='white',
scale=40)
plt.colorbar(pcm, label='Potencial')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Potencial y Campo Eléctrico')
plt.axis('equal')
plt.savefig("campo_electrico.png", dpi=300)
plt.show()
electrostatica-6-1
import numpy as np
import matplotlib.pyplot as plt
N = 200
x = np.linspace(-2, 2, N)
y = np.linspace(-2, 2, N)
X, Y = np.meshgrid(x, y)
epsilon = 0.05
q = 1.0
a = 0.8
# Carga real
R1 = np.sqrt(X**2 + (Y - a)**2 + epsilon**2)
# Carga imagen
R2 = np.sqrt(X**2 + (Y + a)**2 + epsilon**2)
phi = q/R1 - q/R2
dx = x[1] - x[0]
dy = y[1] - y[0]
dphidy, dphidx = np.gradient(phi, dy, dx)
Ex = -dphidx
Ey = -dphidy
plt.figure(figsize=(6,5))
pcm = plt.pcolormesh(X, Y, phi,
shading='auto',
cmap='viridis')
plt.axhline(0, color='white', linewidth=2)
step = 8
plt.quiver(X[::step, ::step],
Y[::step, ::step],
Ex[::step, ::step],
Ey[::step, ::step],
color='white',
scale=60)
plt.colorbar(pcm, label='Potencial')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Carga Imagen frente a Plano Conductor')
plt.axis('equal')
plt.savefig("carga_imagen.png", dpi=300)
plt.show()
electrostatica-6-1
electrostatica-7-1
import numpy as np
import matplotlib.pyplot as plt
plt.style.use("dark_background")
N = 400
x = np.linspace(-2, 2, N)
y = np.linspace(-2, 2, N)
X, Y = np.meshgrid(x, y)
epsilon = 0.03
q = 1.0
a = 0.8
R1 = np.sqrt(X**2 + (Y - a)**2 + epsilon**2)
R2 = np.sqrt(X**2 + (Y + a)**2 + epsilon**2)
phi = q/R1 - q/R2
dx = x[1] - x[0]
dy = y[1] - y[0]
dphidy, dphidx = np.gradient(phi, dy, dx)
Ex = -dphidx
Ey = -dphidy
E_mag = np.sqrt(Ex**2 + Ey**2)
fig, ax = plt.subplots(figsize=(8,8))
ax.pcolormesh(X, Y, phi,
shading='auto',
cmap='plasma')
ax.streamplot(X, Y, Ex, Ey,
color=E_mag,
cmap='inferno',
density=2.5,
linewidth=1.5)
ax.axhline(0, color='white', linewidth=3)
ax.set_xticks([])
ax.set_yticks([])
ax.set_frame_on(False)
ax.set_aspect('equal')
plt.tight_layout()
plt.savefig("portada_carga_imagen.png",
dpi=600,
bbox_inches='tight',
pad_inches=0)
plt.show()