ab23007uno 0.5.0
Librería de métodos numéricos para resolver problemas matemáticos
Requires Python: >=3.6

# ab23007uno

Una librería de Python para resolver problemas matemáticos y numéricos, especializada en métodos iterativos y directos para la resolución de sistemas de ecuaciones lineales y búsqueda de raíces.

## Instalación

```bash
pip install ab23007uno
```

## Características

La librería implementa los siguientes métodos numéricos:

### Sistemas de Ecuaciones Lineales

- **Eliminación Gaussiana**: Método directo para resolver sistemas de ecuaciones lineales.
- **Eliminación Gauss-Jordan**: Versión extendida del método de eliminación gaussiana.
- **Factorización LU**: Descomposición de una matriz en el producto de matrices triangulares.
- **Regla de Cramer**: Resolución mediante determinantes.
- **Método de Jacobi**: Solución iterativa para sistemas de ecuaciones.
- **Método de Gauss-Seidel**: Método iterativo con convergencia mejorada respecto a Jacobi.

### Búsqueda de Raíces

- **Método de la Bisección**: Algoritmo simple para encontrar raíces de funciones continuas.

## Uso

A continuación se muestran ejemplos básicos de uso para cada método:

### Resolución de Sistemas Lineales

```python
import numpy as np
from ab23007uno import gauss_elimination, cramer, lu_decomposition, resolver_LU

# Definir sistema: 5x₁ + x₂ + x₃ = 10
#                   x₁ + 6x₂ + x₃ = 16
#                   x₁ + x₂ + 7x₃ = 24
A = np.array([
    [5, 1, 1],
    [1, 6, 1],
    [1, 1, 7]
])
b = np.array([10, 16, 24])

# Solución esperada: [1, 2, 3]

# Resolver usando eliminación gaussiana
x_gauss = gauss_elimination(A, b)
print("Solución por eliminación gaussiana:", x_gauss)

# Resolver usando Cramer
x_cramer = cramer(A, b)
print("Solución por regla de Cramer:", x_cramer)

# Resolver usando factorización LU
x_lu = resolver_LU(A, b)
print("Solución por factorización LU:", x_lu)
```

### Métodos Iterativos

```python
from ab23007uno import jacobi, gauss_seidel

# Usar los métodos iterativos con valores por defecto
x0 = np.zeros(len(b))  
x_jacobi, iterations_jacobi = jacobi(A, b, x0)
print(f"Solución por método de Jacobi ({iterations_jacobi} iteraciones):", x_jacobi)

# Ejemplo con parámetros personalizados
x_seidel, iterations_seidel, error_seidel= gauss_seidel(A, b, x0, tol=1e-8, verbose=True)
print(f"Solución por método de Gauss-Seidel ({iterations_seidel} iteraciones):", x_seidel)
```

### Búsqueda de Raíces

```python
import math
from ab23007uno import bisection

# Definir función f(x) = x^3 - x - 2
def f(x):
    return x**3 - x - 2

# Ejemplo con función que usa math
def g(x):
    return math.sin(x) - 0.5

# Resolver usando método de bisección con los valores por defecto
x_biseccion1, iterations1 = bisection(f, 1, 2)
# También puedes personalizar los parámetros si es necesario
x_biseccion2, iterations2 = bisection(g, 0, math.pi/2, tol=1e-8, verbose=True)

print(f"Solución de f(x) = 0 por bisección ({iterations1} iteraciones): {x_biseccion1}")
print(f"Solución de g(x) = 0 por bisección ({iterations2} iteraciones): {x_biseccion2}")
```

## Requisitos

- NumPy >= 1.19.0
- Python >= 3.6