Simular/trazar campo electrostático

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:ingrese la descripción de la imagen aquí

Para este tipo de cosas, uso Comsol Multiphysics. comsol.com

Respuestas (2)

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.ingrese la descripción de la imagen aquí

¿Puedes compartir alguna guía rápida sobre cómo hiciste esto? ¿En qué modo, etc.?
En el modo AC/DC uso electrostática. Para los materiales utilicé cobre, y como límites el de abajo como tierra ( V = 0 ) y el superior con potencial eléctrico V = 9 . Además, para obtener las líneas de campo, agregue líneas de corriente a su solución.
@vnb: Hola, tengo algunos problemas para realizar una simulación con COMSOL y, de hecho, no conozco a mucha gente por aquí que sepa usar este software. Honestamente, no pude encontrar ningún documento útil o modelo de ejemplo/tutorial para resolver mis problemas. Realmente necesito esto. Noté que has usado este software para responder preguntas sobre SE. ¿Podría por favor ayudarme a resolver mi problema? Realmente lo aprecio. ¡Gracias! (andx@chmail.ir)
"Compre este programa costoso" no es realmente una buena respuesta de intercambio de pila. ¿Qué hay de explicar algo de la física? Además, el espaciado de las líneas de campo es un poco raro, deben estar espaciados de manera bastante uniforme lejos de las esquinas o tener un gradiente de buen comportamiento.

¡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.

Solucionador de ecuaciones de Laplace del tanque de salmuera

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:

¡Relájate, Laplace!

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()