Skip to content

Latest commit

 

History

History
154 lines (105 loc) · 5.23 KB

README.es-AR.md

File metadata and controls

154 lines (105 loc) · 5.23 KB

Calculadora con Matrices

Click here to read in english.

Autores: Tomás Badenes y Santiago Fernandez

Video de demostracion

Descripción

Este programa fue el resultado de un desafío de un docente de cátedra de matemática. La consigna era:

  1. Escribir un código que dadas dos matrices analice si pueden sumarse y en caso afirmativo calcule la suma
  2. Escribir un código que dadas dos matrices analice si el producto está definido y en caso afirmativo lo calcule
  3. Escribir un código que dada una matriz analice si tiene inversa y en caso afirmativo la calcule
  4. Implemente un programa que dado un sistema de ecuaciones lineales analice la compatibilidad del sistema

Nosotros hemos decidido llevarlo un paso mas allá y crear una calculadora completa, escrita en Rust, que integre las soluciones a los cuatro problemas propuestos y un poco mas. Sus características se detallan abajo, así como las instrucciones de instalación y uso.

Características

La calculadora funciona mediante comandos. La sintaxis general es: <COMANDO> [parámetros]

Para obtener una lista de los posibles comandos, utilice el comando ayuda

Operaciones entre escalares y matrices

Esta calculadora es capaz de resolver calculos combinados utilizando operaciones entre matrices y escalares. Las operaciones soportadas son:

  • *: Multiplicación
  • /: División
  • +: Suma
  • -: Resta (o suma con el producto de -1 por el sustraendo)
  • ^: Potencia
  • T: Transpuesta de una matriz (sintaxis: <matriz> T)
  • DET: Determinante de una matriz (sintaxis: <matriz> DET)
  • INV: Inversa de una matriz (sintaxis: <matriz> INV)

Resolucion de cálculos combinados

Utilizando el comando ecu y como parametro un cadena de operandos y operadores separados por espacios, la calculadora resolverá el cálculo si tiene solución, o mostrará un mensaje de error en caso de expresiones malformadas o operaciones no definidas.

Por ejemplo, para calcular ((((Matriz A + B) * (Matriz A al cuadrado)) <- Transponer) <- Determinante) + PI:

>>> ecu ( ( A + B ) * ( A ^ 2 ) T ) DET + PI
Resultado: -186.8585

Declaracion y almacenamiento de variables

Utilizando el comando mostrar se pueden ver las variables almacenadas. La calculadora incluye algunas por defecto:

>>> mostrar
PI = 3.1415

B =
3 4.5
8 2

A =
1 2
3 4

C = 0

También se le puede exigir al comando mostrar que filtre por nombre de variable:

>>> mostrar A PI E
A =
1 2
3 4

PI = 3.1415

La variable `E` no está definida

Estos identificadores pueden luego ser utilizados en las expresiones ecu

Sistemas de ecuaciones

Mediante el comando ecsis se puede ingresar un sistema de ecuaciones en la forma de la matriz expandida en el vector resultado (A|b) para determinar si este tiene solución o no.

Utilización

Instalación desde código fuente

  1. Clonar el repositorio:
git clone https://github.com/b-Tomas/calculadora.git

O utilizar el botón verde para descargar un comprimido .zip

  1. Descargar e instalar la versión de rust para tu sistema operativo desde la página oficial

  2. Compile el proyecto

cargo build
  1. Compruebe que los tests de unidad:
$ cargo test
running 21 tests
test exp_interpreter::tests::test_postfix_to_tree ... ok
test exp_interpreter::tests::test_infix_to_postfix ... ok
test math::tests::compatible_determinado ... ok
test math::tests::identity_matrix ... ok
test math::tests::determinant ... ok
test math::tests::incompatible_equation ... ok
test math::tests::mat_pow ... ok
test math::tests::matrix_multiplication ... ok
test math::tests::inverse_test ... ok
test math::tests::matrix_sub ... ok
test math::tests::matrix_sum ... ok
test math::tests::multiplication_by_scalar ... ok
test math::tests::transposed ... ok
test exp_interpreter::tests::test_solve ... ok
test math::tests::test_adj ... ok
test math::tests::undetermined ... ok
test math::tests::very_incompatible ... ok
test structs::tests::create_empty_matrix ... ok
test structs::tests::create_matrix_from_data ... ok
test structs::tests::equals ... ok
test structs::tests::is_squared ... ok

test result: ok. 21 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
  1. Inicie el programa:
cargo run

Instalación de binarios

Visite la página de releases para descargar el programa compilado para su plataforma, aunque se recomienda instalar de código fuente para tener disponible la última versión del programa.

Acerca de las soluciones

La lógica responsable de la solución de los problemas matemáticos se encuentra en el archivo src/math.rs. Dado que se trataba de trabajo práctico de matemáticas, decidimos mantenernos alejados de librerías externas que nos faciliten los cálculos para programar las soluciones desde cero.

Además, fue nuestro primer contacto con el lenguaje Rust. Si bien el código no es perfecto o el más prolijo, creemos que es bastante aceptable habiendo tenido sólo una semana para completarlo.