Tengo algo como esto: para un voltaje dado (cable rojo de 9 V, cable azul de 0 V), quiero simular un campo electrostático.
Ya sé, por ejemplo, que en el punto (10.5;0) hay 10 V, etc. Quiero simular y trazar el campo electrostático para futuras comparaciones y para mi informe.
¿Hay algún software para hacer eso? Me gusta trabajar con Maple, así que si hay alguna caja de herramientas, me encantaría saber de ella.
Para una posición ligeramente diferente, la trama se ve horrible ahora:
Como dije anteriormente en mi comentario, Comsol es bastante útil para este tipo de cosas. Tomé tu problema, y esta es la trama que obtuve. Espero que sea útil.
¡El tanque de salmuera es una forma histórica y excelente de encontrar soluciones a la ecuación de Laplace! Esto se usó para diseñar cosas como imanes de ciclotrón y lentes electrostáticas para partículas cargadas antes de que las computadoras fueran lo suficientemente rápidas.
Imagen de Tanabe y Yamada 1958 ; Informes científicos del Instituto de Investigación, Universidad de Tohoku, Serie A, 10, 133-174
La forma más sencilla de resolverlo numéricamente es hacer " relajación de Jacobi ". Lea más sobre esto aquí, por ejemplo . En coordenadas cartesianas, haces una cuadrícula numérica y estableces los puntos que corresponden a la superficie de los conductores a su potencial, y estableces el potencial al límite a algún valor intermedio. A continuación, he elegido -1, +1 y 0. El límite debe estar lo suficientemente lejos para que no afecte mucho a su región de interés. Esta es una técnica aproximada.
Luego iteras. Para cada pase, crea un nuevo potencial que es el promedio de los vecinos más cercanos +/-x y +/-y, cuatro en total. Solo actualiza los puntos que no están en el conductor o límite . Después de miles de iteraciones, el potencial se acerca a una solución de la ecuación de Laplace.
Si desea una mejor solución, haga el espacio más pequeño y el límite más alejado. Si es demasiado lento (con frecuencia está en 3D), entonces puede usar
multirredes ; resolver en una cuadrícula gruesa (rápida), luego interpolar a una cuadrícula fina e iterar un poco más
sobrerelajación sucesiva ; "sobrepasar" el promedio cambiando los valores en una cantidad superior al 100 % de lo que tendría con un promedio simple. Pruebe valores como 110% a 150%, puede volverse inestable si son demasiado grandes.
Si tienes alguna duda o necesitas aclaración, deja un comentario. Usé esta técnica en esta pregunta , donde guardé instantáneas intermedias y las convertí en un GIF.
Aquí hay un ejemplo en Python:
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import convolve
d = 0.25
x = np.arange(0, 35+d, d)
y = np.arange(0, 48+d, d)
X, Y = np.meshgrid(x, y)
phi = np.zeros_like(X)
isneg = np.zeros_like(X, dtype=bool)
ispos = np.zeros_like(X, dtype=bool)
bound = np.zeros_like(X, dtype=bool)
isneg[(X>=9)*(X<=19)*(Y>=10)*(Y<=12)] = True
ispos[(X>=10)*(X<=20)*(Y>=28)*(Y<=30)] = True
ispos[(X>=18)*(X<=20)*(Y>=20)*(Y<=28)] = True
bound[:,0] = bound[:,-1] = bound[0,:] = bound[-1,:] = True
phi[isneg] = -1.0
phi[ispos] = +1.0
phi[bound] = 0.0
updateme = np.ones_like(X, dtype=bool)
updateme[isneg] = updateme[ispos] = updateme[bound] = False
kernel = 0.25*np.array([[0, 1, 0], [1, 0, 1], [0, 1, 0]], dtype=float)
phi0 = phi.copy() # keep the original handy
keepers = 0, 100, 500, 1000, 2000, 9999
keep = []
for i in range(10000):
if i in keepers:
keep.append(phi.copy())
print i
phi2 = convolve(phi, kernel)
phi[updateme] = phi2[updateme]
plt.figure()
for i, (thing, n) in enumerate(zip(keep, keepers)):
plt.subplot(2, 3, i+1)
plt.imshow(thing, origin='lower')
plt.title("n="+str(n))
plt.show()
vnb