Metadata-Version: 2.4
Name: campo_estatico_mdf_maria
Version: 0.1.1
Summary: Solución de la ecuación de Laplace en 2D usando el Método de Diferencias Finitas
Home-page: https://almarm-r.github.io/campo_estatico_mdf/introduccion.html
Author: Maria Moreno , Sebastian Sanchez
Author-email: maamorenor@udistrital.edu.co
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Science/Research
Classifier: Topic :: Scientific/Engineering :: Physics
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.20.0
Requires-Dist: scipy>=1.7.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: sphinx>=4.0.0; extra == "dev"
Requires-Dist: sphinx-rtd-theme>=1.0.0; extra == "dev"
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: license-file
Dynamic: provides-extra
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# campo_estatico_mdf

Solución de la ecuación de Laplace en 2D usando el Método de Diferencias Finitas (MDF).

## Descripción

Este paquete proporciona una implementación eficiente para resolver la ecuación de Laplace en dos dimensiones:

```
∂²V/∂x² + ∂²V/∂y² = 0
```

Es útil para calcular distribuciones de potencial electroestático en regiones 2D con condiciones de contorno fijas.

## Instalación

```bash
pip install campo_estatico_mdf
```

## Uso Básico

```python
from campo_estatico_mdf import LaplaceSolver2D

# Crear el solver con una malla de 50x50 puntos
solver = LaplaceSolver2D(n=50, tolerancia=1e-4)

# Establecer condiciones de contorno (voltajes en los bordes)
solver.establecer_condiciones_contorno(
    izquierda=0.0,
    derecha=10.0,
    superior=0.0,
    inferior=0.0
)

# Resolver usando el método de Gauss-Seidel
iteraciones = solver.resolver_gauss_seidel()

# Obtener el potencial
potencial = solver.obtener_potencial()

# Calcular el campo eléctrico
e_x, e_y = solver.calcular_campo_e()

print(f"Convergió en {iteraciones} iteraciones")
```

## Características

- **Dos métodos iterativos**: Jacobi y Gauss-Seidel
- **Criterio de convergencia automático**: Se detiene cuando se alcanza la tolerancia
- **Cálculo del campo eléctrico**: Obtiene E = -∇V automáticamente
- **Eficiente**: Usa NumPy para operaciones matriciales optimizadas

## Métodos Disponibles

### LaplaceSolver2D

#### `__init__(n, tolerancia=1e-4)`
Inicializa el solver con una malla de N×N puntos.

#### `establecer_condiciones_contorno(izquierda, derecha, superior, inferior)`
Define los voltajes en los cuatro bordes de la región.

#### `resolver_jacobi(max_iteraciones=10000)`
Resuelve usando el método de Jacobi. Retorna el número de iteraciones.

#### `resolver_gauss_seidel(max_iteraciones=10000)`
Resuelve usando el método de Gauss-Seidel (más rápido). Retorna el número de iteraciones.

#### `calcular_campo_e()`
Calcula el campo eléctrico E = -∇V. Retorna las componentes (E_x, E_y).

#### `obtener_potencial()`
Retorna la matriz de potencial V(x,y).

#### `obtener_iteraciones()`
Retorna el número de iteraciones realizadas.

## Ejemplo Avanzado

```python
import matplotlib.pyplot as plt
from campo_estatico_mdf import LaplaceSolver2D

# Configuración
solver = LaplaceSolver2D(n=100, tolerancia=1e-5)
solver.establecer_condiciones_contorno(
    izquierda=0.0,
    derecha=100.0,
    superior=50.0,
    inferior=50.0
)

# Resolver
iteraciones = solver.resolver_gauss_seidel()
print(f"Convergió en {iteraciones} iteraciones")

# Visualizar potencial
v = solver.obtener_potencial()
plt.figure(figsize=(10, 8))
plt.imshow(v, cmap='viridis', origin='lower')
plt.colorbar(label='Potencial (V)')
plt.title('Distribución de Potencial Eléctrico')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

# Visualizar campo eléctrico
e_x, e_y = solver.calcular_campo_e()
x = np.arange(0, solver.n)
y = np.arange(0, solver.n)
X, Y = np.meshgrid(x, y)

plt.figure(figsize=(10, 8))
plt.quiver(X[::5, ::5], Y[::5, ::5], 
           e_x[::5, ::5], e_y[::5, ::5])
plt.title('Campo Eléctrico')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
```

## Requisitos

- Python >= 3.8
- NumPy >= 1.20.0
- SciPy >= 1.7.0

## Licencia

MIT License

## Autor

Maria Moreno - maamorenor@udistrital.edu.co
Sebastian Sanche - zolarpunk@gmail.com

## Contribuciones

Las contribuciones son bienvenidas. Por favor, abre un issue o pull request en GitHub.

## Documentación

Para documentación completa, visita: https://almarm-r.github.io/campo_estatico_mdf
