12 KiB
Calculadora MAV - CAS Híbrido
Descripción General
La Calculadora MAV es un Sistema de Álgebra Computacional (CAS) Híbrido que combina la potencia de SymPy con clases especializadas para networking, programación y análisis numérico.
Características Principales
- Motor SymPy completo: Todas las funciones de cálculo simbólico
- Sintaxis simplificada:
Class[args]
en lugar deClass("args")
- Detección automática de ecuaciones: Sin necesidad de comillas especiales
- Resultados interactivos: Plots, matrices y listas clickeables
- Clases especializadas: IP4, Hex, Bin, Date, Dec, Chr
- Variables SymPy puras: Todas las variables son símbolos automáticamente
Instalación
Método 1: Instalación Automática
python launcher.py --setup
Método 2: Instalación Manual
# Instalar dependencias
pip install sympy matplotlib numpy
# En Linux: instalar tkinter
sudo apt-get install python3-tk
# Ejecutar tests (opcional)
python test_suite.py
# Iniciar aplicación
python launcher.py
Dependencias Requeridas
- Python 3.8+
- SymPy ≥ 1.12 (motor algebraico)
- Matplotlib ≥ 3.7.0 (plotting)
- NumPy ≥ 1.24.0 (cálculos numéricos)
- Tkinter (interfaz gráfica, incluido con Python)
Dependencias Opcionales
- Markdown ≥ 3.4.0 (ayuda mejorada)
- pytest ≥ 7.0.0 (testing)
Guía de Uso
Sintaxis Básica
Clases Especializadas (Solo Corchetes)
# Direcciones IP con funcionalidad de red
IP4[192.168.1.100/24]
IP4[10.0.0.1, 8]
IP4[172.16.0.5, 255.255.0.0]
# Números en diferentes bases
Hex[FF] # Hexadecimal: 0xFF
Bin[1010] # Binario: 0b1010
Dec[10.5] # Decimal: 10.5
# Caracteres ASCII
Chr[A] # Carácter único: 'A' (ASCII 65)
Chr[Hello] # String: 'Hello'
Métodos de Clases Especializadas
# Métodos de IP4
ip = IP4[192.168.1.100/24]
ip.NetworkAddress[] # 192.168.1.0/24
ip.BroadcastAddress[] # 192.168.1.255/24
ip.Nodes() # 254 (hosts disponibles)
# Conversiones
Hex[255].toDecimal() # 255
Dec[66].toChr() # Chr('B')
Ecuaciones y Álgebra
Detección Automática de Ecuaciones
# Ecuaciones simples (detectadas automáticamente)
x + 2 = 5
3*a + b = 10
y**2 = 16
# Desigualdades
x > 5
a <= 10
b != 0
# Ecuaciones complejas
sin(x) = 1/2
log(y) + 3 = 5
Resolución de Ecuaciones
# Resolver ecuación específica
solve(x**2 + 2*x - 8, x) # [-4, 2]
# Atajo para resolver variable
x=? # Equivale a solve(x)
# Resolver sistema de ecuaciones
x + y = 10
x - y = 2
solve([x + y - 10, x - y - 2], [x, y]) # {x: 6, y: 4}
Variables y Símbolos
Variables SymPy Automáticas
# Todas las variables son símbolos SymPy automáticamente
x + 2*y # Expresión simbólica
z = 5 # z es Symbol('z') con valor 5
w = z**2 + 3 # w es expresión: Symbol('z')**2 + 3
# Evaluación automática cuando es posible
a = 10
b = a + 5 # b = 15 (evaluado)
c = a + x # c = 10 + x (simbólico)
Funciones Matemáticas
Cálculo Diferencial e Integral
# Derivadas
diff(x**3, x) # 3*x**2
diff(sin(x)*cos(x), x) # -sin(x)**2 + cos(x)**2
# Integrales
integrate(x**2, x) # x**3/3
integrate(sin(x), (x, 0, pi)) # 2
# Límites
limit(sin(x)/x, x, 0) # 1
# Series de Taylor
series(exp(x), x, 0, 5) # 1 + x + x**2/2 + x**3/6 + x**4/24 + O(x**5)
Funciones Trigonométricas
# Funciones básicas
sin(pi/2) # 1
cos(0) # 1
tan(pi/4) # 1
# Funciones inversas
asin(1) # pi/2
acos(0) # pi/2
atan(1) # pi/4
# Funciones hiperbólicas
sinh(0) # 0
cosh(0) # 1
tanh(0) # 0
Álgebra y Simplificación
# Simplificación
simplify((x**2 - 1)/(x - 1)) # x + 1
expand((x + 1)**3) # x**3 + 3*x**2 + 3*x + 1
factor(x**2 - 1) # (x - 1)*(x + 1)
# Manipulación de expresiones
collect(x**2 + 2*x + x**2, x) # 2*x**2 + 2*x
cancel((x**2 - 1)/(x - 1)) # x + 1
Álgebra Lineal
Matrices
# Crear matrices
M = Matrix([[1, 2], [3, 4]])
N = Matrix([[5, 6], [7, 8]])
# Operaciones básicas
M + N # Suma de matrices
M * N # Multiplicación
M**2 # Potencia
# Propiedades (clickeables en interfaz)
det(M) # Determinante: -2
inv(M) # Matriz inversa
M.transpose() # Transpuesta
Plotting Interactivo
Plots 2D
# Plot básico
plot(sin(x), (x, -2*pi, 2*pi))
# Múltiples funciones
plot(sin(x), cos(x), (x, 0, 2*pi))
# Plot con clases especializadas
plot(Hex[x]/256, (x, 0, 255))
Plots 3D
# Superficie 3D
plot3d(x**2 + y**2, (x, -5, 5), (y, -5, 5))
# Con funciones trigonométricas
plot3d(sin(x)*cos(y), (x, 0, 2*pi), (y, 0, 2*pi))
Resultados Interactivos
Elementos Clickeables
- 📊 Ver Plot: Abre ventana matplotlib para plots
- 📋 Ver Matriz: Muestra matriz formateada con operaciones
- 📋 Ver Lista: Expande listas largas
- 🔍 Ver Detalles: Información completa de objetos
Ejemplo de Uso
# Estos resultados serán clickeables en la interfaz
Matrix([[1, 2, 3], [4, 5, 6]]) # 📋 Ver Matriz 2×3
plot(x**2, (x, -10, 10)) # 📊 Ver Plot
solve(x**3 - 6*x**2 + 11*x - 6, x) # 📋 Ver Soluciones
Casos de Uso Avanzados
Análisis de Redes
# Definir red
network = IP4[192.168.0.0/24]
host = IP4[192.168.0.100/24]
# Análisis
network.Nodes() # 254 hosts disponibles
host.NetworkAddress[] # 192.168.0.0/24
host.BroadcastAddress[] # 192.168.0.255/24
# Cálculos con variables
base_ip = IP4[10.0.x.0/24]
solve(base_ip.Nodes() == 254, x) # Encuentra x para 254 hosts
Programación y Conversiones
# Conversiones entre bases
hex_val = Hex[FF] # 255 en decimal
bin_val = Bin[hex_val] # Convertir a binario
chr_val = Chr[hex_val] # Carácter ASCII
# Análisis de caracteres
text = Chr[Hello World]
ascii_values = text.value # Lista de valores ASCII
# Operaciones bit a bit (con SymPy)
a = Hex[F0]
b = Hex[0F]
a | b # OR bit a bit
a & b # AND bit a bit
a ^ b # XOR bit a bit
Análisis Matemático Completo
# Definir función compleja
f = sin(x) * exp(-x**2/2)
# Análisis completo
df_dx = diff(f, x) # Derivada
critical_points = solve(df_dx, x) # Puntos críticos
integral = integrate(f, (x, -oo, oo)) # Integral impropia
# Visualización
plot(f, df_dx, (x, -3, 3)) # Plot función y derivada
# Serie de Taylor en punto específico
taylor_series = series(f, x, 0, 6) # Serie alrededor de x=0
Resolución de Sistemas Complejos
# Sistema de ecuaciones no lineales
x**2 + y**2 = 25
x*y = 12
# Resolver
solutions = solve([x**2 + y**2 - 25, x*y - 12], [x, y])
# Análisis paramétrico
# Ecuación con parámetro
a*x**2 + b*x + c = 0
# Resolver para diferentes valores
a_val = 1
b_val = 2
c_val = -3
solve(a_val*x**2 + b_val*x + c_val, x)
Interfaz de Usuario
Paneles
- Panel Izquierdo: Entrada de código
- Panel Derecho: Resultados con colores y elementos interactivos
Menús
- Archivo: Nuevo, Cargar, Guardar
- Editar: Limpiar, operaciones de texto
- CAS: Mostrar variables/ecuaciones, resolver sistema
- Ayuda: Guías, sintaxis, funciones SymPy
Atajos de Teclado
- Ctrl+S: Guardar archivo
- Ctrl+O: Abrir archivo
- Ctrl+N: Nueva sesión
- F1: Ayuda rápida
Menú Contextual (Clic Derecho)
- Panel Entrada: Cortar, Copiar, Pegar, Insertar ejemplo
- Panel Salida: Copiar todo, Limpiar salida
Configuración y Personalización
Archivos de Configuración
hybrid_calc_settings.json
: Configuración de ventana y UIhybrid_calc_history.txt
: Historial de sesión anterior
Variables de Entorno
PYTHONPATH
: Asegurar que módulos sean encontradosMPLBACKEND
: Backend de matplotlib (ej:TkAgg
)
Resolución de Problemas
Errores Comunes
Dependencias Faltantes
# Error: ModuleNotFoundError: No module named 'sympy'
pip install sympy matplotlib numpy
# Linux: tkinter no disponible
sudo apt-get install python3-tk
Errores de Sintaxis
# Incorrecto: sintaxis antigua
IP4("192.168.1.1/24")
# Correcto: nueva sintaxis
IP4[192.168.1.1/24]
Problemas de Variables
# Las variables son símbolos automáticamente
x = 5 # x es Symbol('x') con valor 5, no variable Python
y = x + 2 # y es Symbol('x') + 2, evaluado como 7
# Para variables Python tradicionales, usar eval explícito:
@eval: python_var = 5 # Sintaxis especial (si implementada)
Performance
Optimizaciones
- Las líneas anteriores se cachean (no se re-evalúan)
- Parsing de corchetes se cachea para expresiones repetidas
evalf()
es lazy (solo cuando se muestra resultado)
Límites Conocidos
- Sistemas de ecuaciones muy grandes pueden ser lentos
- Plots 3D complejos requieren tiempo de renderizado
- Matrices muy grandes pueden consumir memoria
Desarrollo y Extensión
Estructura del Proyecto
calculadora-mav-cas/
├── launcher.py # Launcher principal
├── setup.py # Script de instalación
├── test_suite.py # Tests unitarios
├── requirements.txt # Dependencias
├── bracket_parser.py # Parser de sintaxis
├── hybrid_base_types.py # Clases especializadas
├── hybrid_evaluation_engine.py # Motor CAS
├── interactive_results.py # Resultados clickeables
└── hybrid_calc_app.py # Aplicación principal
Agregar Nuevas Clases
# En hybrid_base_types.py
class HybridNewType(HybridCalcType):
def __new__(cls, value_input):
obj = HybridCalcType.__new__(cls)
return obj
def __init__(self, value_input):
# Procesar entrada
super().__init__(processed_value, original_str)
def specialized_method(self):
# Funcionalidad específica
pass
Extender Parser
# En bracket_parser.py
class BracketParser:
BRACKET_CLASSES = {'IP4', 'Hex', 'Bin', 'Date', 'Dec', 'Chr', 'NewType'}
Changelog
Versión 2.0 (CAS Híbrido)
- ✅ Motor SymPy completo como base
- ✅ Sintaxis con corchetes únicamente
- ✅ Detección automática de ecuaciones
- ✅ Variables SymPy puras
- ✅ Resultados interactivos clickeables
- ✅ Sistema de plotting integrado
- ✅ Arquitectura modular extensible
Diferencias vs Versión 1.0
Característica | v1.0 | v2.0 |
---|---|---|
Motor | Python eval/exec | SymPy completo |
Sintaxis | Class("args") |
Class[args] |
Ecuaciones | "x + 2 = 5" |
x + 2 = 5 (automático) |
Variables | Python mixto | SymPy puro |
Resultados | Texto plano | Interactivos clickeables |
Funciones | Básicas math | SymPy completo |
FAQ
¿Puedo usar la sintaxis antigua?
No. La v2.0 usa exclusivamente sintaxis con corchetes para consistencia y simplicidad.
¿Cómo evalúo código Python tradicional?
Todas las operaciones se manejan con SymPy. Para casos especiales, se puede implementar sintaxis @eval:
en futuras versiones.
¿Los resultados son exactos?
Sí. SymPy maneja aritmética exacta por defecto. Use .evalf()
para aproximaciones decimales.
¿Puedo crear plots personalizados?
Sí. Los resultados de plot()
son clickeables y abren matplotlib completo con opciones de personalización.
¿Cómo reportar bugs?
Ejecute python test_suite.py
para diagnosticar problemas y reporte cualquier test que falle.
Calculadora MAV - CAS Híbrido v2.0
Desarrollado para cálculo matemático avanzado con soporte especializado