
Math Solver
Visita el proyecto
Descripción
El proyecto consiste en una aplicación web que permite a los usuarios resolver problemas matemáticos como la conversión de unidades, la resolución simbólica y la representación gráfica. La aplicación utiliza Python y Flask para crear un servidor web que envía solicitudes dinámicas al navegador del usuario. Las plantillas HTML se crean utilizando Jinja2 y TailwindCSS para crear una interfaz adaptable y fácil de usar. Más concretamente, el frontend utiliza algunos componentes de Flowbite (barra de navegación y formularios) para crear una interfaz visualmente atractiva. Además, se implementa un tema intercambiable utilizando TailwindCSS, las propiedades de modo oscuro y algo de JavaScript.
Para evitar una repetición excesiva de la sintaxis, se define un archivo templates/layout.html con el HTML base, que incluye la barra de navegación y el botón del tema oscuro/claro. Las distintas páginas definidas en la carpeta templates son la página de inicio, la página de conversión de unidades, la página de resolución simbólica, la página de representación gráfica y la página de disculpa. Todas las páginas utilizan la misma estructura y comparten la misma barra de navegación.
La lógica de negocio se implementa mediante clases de Python que gestionan la conversión de unidades y la resolución simbólica. Estos módulos de Python están en la carpeta app/models:
- El módulo
conversor.pycontiene clases para gestionar elementos como dimensiones, unidades, medidas y sistemas de unidades. Una unidad se define por su nombre, símbolo, lista de factores dimensionales y una función invocable para convertirla al Sistema Internacional de Unidades. Por otro lado, las medidas se definen por su valor y la lista de factores de unidad correspondientes a ese valor. Existen otros objetos, comoPhysicalDimensions, que define los factores dimensionales correspondientes a cada magnitud para que la claseAllUnitspueda utilizarlos para definir todas las unidades disponibles. Después, la claseUnitSystemsdefine las unidades correspondientes a cada sistema de unidades y, finalmente, la claseUnitConversorimplementa el analizador para identificar factores de unidad a partir de cadenas de texto y el propio conversor. El código está implementado de modo que se puedan añadir más unidades y sistemas sin modificaciones adicionales. Además, el conversor también puede gestionar la conversión de divisas mediante la API de HexaRate. - El módulo
symbolic.pycontiene una única clase con un método para cada solucionador simbólico. Para analizar y obtener la solución se utiliza la biblioteca SymPy. En primer lugar, el métodosolve_equationdevuelve la solución de cualquier ecuación expresada en términos de una única incógnita. El usuario debe introducir la expresión que es igual a 0 y el símbolo correspondiente a la incógnita. Los métodossolve_integralysolve_derivativehacen algo similar, pero con la expresión de la función que se desea integrar o derivar y pasando la variable de integración o derivación. Finalmente, para proporcionar un solucionador de álgebra lineal, se define el métodofind_eigenvalues, que permite encontrar los valores propios y los vectores propios de una matriz concreta introducida como listas anidadas. Estos cuatro métodos implementados son un pequeño subconjunto de lo que sympy puede hacer mediante programación. - El módulo
plotter.pydefine una única clase cuyo constructor acepta la expresión de una función y sus límites. Después, el métodoget_fig()convierte la expresión de la función en una función propiamente dicha mediante sympy y devuelve un objeto de gráfico de plotly. Finalmente, este gráfico se convierte a JSON y se pasa a la plantilla para que pueda renderizarse posteriormente en el navegador. Para ello, una variable de JavaScript recibe el JSON desde un marcador de posición y ejecuta la API de plotly para renderizar el gráfico adaptable.
Varios formularios permiten al usuario introducir valores de entrada para distintos casos. Las solicitudes se gestionan mediante los endpoints definidos en main/routes.py, que devuelven una página de disculpa en caso de que algo salga mal. Para ello, se renderiza la plantilla HTML de disculpa. La plantilla recibe un mensaje y el código de error y renderiza una imagen de la API de HTTP CATS junto con el mensaje específico, si corresponde.
Ejemplos
Conversor de unidades
- Unidades libres: Convierte unidades libremente definiendo las unidades del valor de entrada y el sistema de salida.
- Ejemplo: Convierte 10 metros (m) a pies (ft).
- Por magnitud: Convierte entre distintas unidades de una magnitud concreta.
- Ejemplo: Convierte la temperatura de Celsius (°C) a Fahrenheit (°F).
Solucionador simbólico
-
Ecuación: Resuelve ecuaciones analíticamente a partir de una expresión simbólica.
- Ejemplo: Resuelve la ecuación
x**2 + 2*x + 1 = 0.
- Ejemplo: Resuelve la ecuación
-
Valores propios: Encuentra los valores propios y los vectores propios de una matriz.
- Ejemplo: Encuentra los valores propios y los vectores propios de la matriz
[[1, 2], [3, 4]].
- Ejemplo: Encuentra los valores propios y los vectores propios de la matriz
-
Integral: Resuelve la integral indefinida de una función a partir de una expresión simbólica.
- Ejemplo: Resuelve la integral
∫(x**2 + 2*x + 1) dx.
- Ejemplo: Resuelve la integral
-
Derivada: Encuentra la derivada de una función a partir de una expresión simbólica.
- Ejemplo: Encuentra la derivada de
sin(x).
- Ejemplo: Encuentra la derivada de
Representación gráfica
- Gráfico: Representa una función a partir de su expresión simbólica entre dos límites.
- Ejemplo de gráfico:
tanh(x)entre-5y5.
- Ejemplo de gráfico: