miércoles, 8 de febrero de 2017

Uso de Maxima en teoría de números enteros, inducción y recursividad

A continuación, pongo un listado de problemas de teoría de números enteros, inducción y recursividad y como Maxima puede ayudarnos a resolverlos.

1- Calcular el mínimo común múltiplo de mcm(12, 30) y mcm(4,6) usando la función lcm(a,b):



2- Comprobar con los números 12 y 30 la siguiente propiedad: el producto de dos números naturales es igual al producto de su máximo común divisor por su mínimo común múltiplo.



3- Para 310 y 181 calcular su máximo común divisor usando el Algoritmo de Euclides ( es decir con la función igcdex ). Escribir, además, este máximo común divisor como combinación lineal de los dos números.


El mcd (310,181) = 1; además 1=310⋅(87)+181⋅(-149)

4- ¿Cuánto vale la suma de los cubos de los n primeros números impares?



5- ¿Cuánto vale la suma de los n primeros múltiplos de 4?



6- ¿Cuánto vale la suma de los cuadrados de los n primeros números pares?


7- Dado el conjunto Z/(45), calcular en qué clase de dicho conjunto están los números enteros 51253 y 5336







8- El número de bacterias de una colonia se triplica cada hora. Si la colonia comienza con cuatro bacterias, calcular el total de bacterias existentes después de n horas. ¿Cuántas bacterias habrá al cabo de 10 horas?

Es una progresión geométrica donde en el instante inicial tenemos 4 bacterias y por cada hora hay que multiplicar el resultado de la hora anterior por 3 (4*3^número de horas). Para calcularlo podemos definir la función recursiva de la siguiente manera:





9- Factorizar en primos los números 312 y 182




10- Definir una función recursiva mcd(a,b) que devuelva el máximo común de dos números positivos a y b,(a>b) usando el algoritmo de Euclides.



martes, 24 de enero de 2017

Uso de Maxima en relaciones binarias

A continuación, pongo un listado de problemas de relaciones binarias y como Maxima puede ayudarnos a resolverlos.

1- Definir un conjunto A, formado por 25 números naturales no consecutivos y comprendidos entre 500 y 1000.


2- En L, definir la relación de equivalencia: x R y si x-y es un múltiplo de 7.

3- Comprobar que números de A están relacionados con el 464

4- Calcular todas las clases de equivalencia en A


5- Sean f: ZZ y g: ZZ definidas por f (x) = x+1 y g (x)= x-1. Ambas son biyectivas. Demostrar que g es la inversa de f.

domingo, 8 de enero de 2017

Uso de Maxima en lógica y conjuntos

A continuación, pongo un listado de problemas de lógica y conjuntos y como Maxima puede ayudarnos a resolverlos.

Ejemplo 1- Resolver la expresión proposicional p ∧ (q ∨ r) para las variables lógicas ¬p (p=false), ¬t (t=false) y r (r=true):


Ejemplo 2-Simplificar mediante las leyes del álgebra de proposiciones las siguientes expresiones:
¬ ( p ∧ q )


¬ ( p ∨ q )


Ejemplo 3-  Dados los conjuntos A= {2, 6, 13}, B= {3, 6, 15} y C= {1, 2, 5, 6, 15}
Defino los conjuntos de la siguiente manera:


a) Calcular A∪(B∩C) y B-(A∪C).


b) Calcular el cardinal de A∪B∪C.


sábado, 24 de diciembre de 2016

Maxima: Un sistema de álgebra computacional

En esta ocasión quería hablaros de Maxima, un software matemático que he estado utilizando estos últimos meses y del que estoy muy sorprendido por sus amplias capacidades en el ámbito del algebra.

Máxima es un sistema de álgebra computacional derivado de Macsyma, creado por el MIT y desarrollado en el lenguaje de programación Lisp, también es 100% gratuito por estar bajo licencia GLP. Está especializado en operaciones simbólicas, permitiendo realizar cálculos conceptualmente ilimitados (solo nos limitará el hardware de la máquina) pero además de lo anterior posibilita la realización de cálculos intensivos en reales de coma flotante con una alta precisión.

Maxima nos permite la manipulación de expresiones simbólicas y numéricas, teniendo soporte para operar en los siguientes campos de las matemáticas:
  • Soporte para campos más específicos de las matemáticas
    • Polinomios: Operaciones con polinomios.
    • Funciones Especiales: Funciones especiales.
    • Funciones elípticas: Funciones e integrales elípticas.
    • Límites: Cálculo de límites.
    • Diferenciación: Cálculo diferencial.
    • Integración: Cálculo integral.
    • Ecuaciones: Definición y resolución de ecuaciones.
    • Ecuaciones Diferenciales: Definición y resolución de ecuaciones diferenciales.
    • Métodos numéricos: Integración numérica, transformadas de Fourier, etc.
    • Matrices y Álgebra Lineal: Operaciones matriciales.
    • Afines     
    • itensor: Manipulación indexada de tensores
    • ctensor: Manipulación por componentes de tensores
    • atensor: Manipulación algebraica de tensores
    • Sumas productos y series: Sumas, productos, Taylor y series de potencias.
    • Teoría de Números: Teoría de números.
    • Simetrías     
    • Grupos: Álgebra abstracta.
  • Funcionalidades avanzadas y programación
    • Entorno de Ejecución: Personalización de Maxima. 
    • Miscelánea de opciones: Opciones que afectan globalmente el comportamiento de Maxima. 
    • Reglas y patrones: Patrones de definidos por el usuario y reglas de simplificación.
    • Conjuntos: Operaciones con conjuntos. 
    • Definición de Funciones: Programando funciones. 
    • Programación: Programación en Maxima. 
    • Depurado: Depuración de fallos en programas Maxima. 
  • Paquetes adicionales
    • augmented_lagrangian: Paquete augmented_lagrangian.
    • Bernstein: Polinomios de Bernstein.
    • bode: Gráficos de Bode. 
    • cobyla: Optimización no lineal con restricciones en desigualdades. 
    • contrib_ode: Procedimientos adicionales para EDOs. 
    • descriptive: Estadística descriptiva. 
    • diag: Matrices de Jordan. 
    • distrib: Distribuciones de probabilidad. 
    • draw: Un interfaz Maxima-Gnuplot. 
    • drawdf: Dibuja campos de direcciones con Gnuplot. 
    • dynamics: Gráficas de sistemas dinámicos y fractales. 
    • ezunits: Magnitudes dimensionales. 
    • f90: Traductor de Maxima fortran. 
    • finance: Cálculo financiero. 
    • fractals: Fractales. 
    • ggf: Expresión general de sucesiones. 
    • graphs: Teoría de grafos. 
    • grobner: Funciones para trabajar con bases de Groebner. 
    • impdiff: Derivadas implícitas. 
    • interpol: Interpolación. 
    • lapack: Paquete LAPACK para álgebra lineal. 
    • lbfgs: Paquete L-BFGS para minimización sin restricciones. 
    • lindstedt: Paquete Lindstedt.
    • linearalgebra: Funciones de álgebra lineal.
    • lsquares: Mínimos cuadrados.
    • makeOrders: Utilidad sobre polinomios.
    • minpack: Funciones MINPACK para optimización y cálculo de raíces
    • mnewton: Método de Newton.
    • numericalio: Lectura y escritura de ficheros.
    • opsubst: Utilidad para sustituciones.
    • orthopoly: Polinomios ortogonales.
    • romberg: Integración numérica por el método de Romberg.
    • simplex: Programación lineal.
    • simplification: Reglas y funciones de simplificación.
    • solve_rec: Recurrencias lineales.
    • stats: Inferencia estadística.
    • stirling: Fórmula de Stirling.
    • stringproc: Procesamiento de cadenas.
    • to_poly_solve: Paquete to_poly_solve.
    • unit: Unidades físicas y dimensiones.
    • zeilberger: Funciones para series hipergeométricas.
Otro aspecto muy interesante de Maxima es que, al facilitarnos el código fuente, podemos adecuarlo para ser utilizado en proyectos donde tengamos necesidades matemáticas de alta precisión.

Como tal, máxima es un motor de cálculo que se usa de manera muy austera mediante comandos, pero si lo que queremos es utilizarlo yo recomendaría su uso a través de un entorno como wxMaxima.

WxMaxima es una interfaz gráfica que permite el uso del motor de cálculo simbólico Máxima de manera fácil gracias a un conjunto de menús y ayudas en línea y también es 100% gratuito por estar bajo licencia GPL.



En futuros post pondré ejemplos de uso en problemas matemáticos concretos.

martes, 17 de mayo de 2016

Subversion: backup y restauración fácil

Hay muchos manuales con comandos muy completos para realizar un backup o una restauración de un repositorio subversion. Yo pongo a continuación los comandos que utilizo en el 99% de los casos para que si alguien se encuentra en la situación de realizar una copia de seguridad o restaurarla no tenga que “calentarse los casco” mirando lo que significa cada uno de los parámetros o mirando si tiene tal o cual opción activa en apache.

Backup

Primero tendremos que localizar en que directorio está nuestro repositorio (en mi caso se encuentra en /var/www/svn/ que es el lugar más común) y luego lanzamos el siguiente comando que nos generará un dump con todo el backup completo del repositorio:

svnadmin dump ruta_absoluta_del_repositorio > nombre_del_backup

Ejemplo

[root@lapsusmentis ~]# svnadmin dump /var/www/svn/lapsusmentis > lapsusmentis

Restauración

Antes de nada indicar que si queremos restaurar el backup en el mismo subversion de donde obtuvimos el backup, primero tendremos que borrar el directorio con el comando rm -rf. En mi caso sería:

[root@lapsusmentis ~]#  rm -rf /var/www/svn/lapsusmentis

Tras este paso, generaremos un nuevo repositorio con el siguiente comando:

[root@lapsusmentis ~]#  svnadmin create /var/www/svn/nuevo_repositorio

Para finalizar, volcaremos el backup con el comando que pongo a continuación:

[root@lapsusmentis ~]#  svnadmin load /var/www/svn/nuevo_repositorio < lapsusmentis

lunes, 11 de abril de 2016

El error de guardar contraseñas en el navegador

En general todos los navegadores permiten que el usuario guarden sus credenciales de acceso (usuario/contraseña) de una web en él, estando activada esta opción por defecto tras su instalación y recordándonos que tenemos esta opción disponible cada vez que entramos en una nueva web que requiere usuario/password para acceder. A continuación pongo una captura para que quede claro al mensaje que me refiero (esta es de Firefox pero en el resto de navegadores es similar).




Aparentemente es un lugar seguro porque si desde el apartado de configuración del navegador le indicamos que nos muestre las contraseñas guardadas, el navegador nos pedirá introducir la contraseña para desbloquear esa opción (normalmente es la del usuario con el que hayamos iniciado sesión en el equipo). La imagen que pongo a continuación es del navegador Chrome pero es similar en el resto de navegadores.

Pero esta seguridad es una quimera porque como muestro a continuación es sencillo que una tercera persona que utilice o acceda al pc obtenga no solo el acceso a la web sino también nuestra contraseña. En los pasos que pongo a continuación he elegido la página de acceso a gmail para explicarlo. Parto de la premisa de que he guardado la contraseña para una cuenta de gmail y por tanto cuando entro el navegador me completa el usuario y contraseña o al poner el usuario me completa la contraseña (esto depende del navegador y de como la haya guardado):

Una vez que estamos en esta situación, vamos a hacer que el navegador en vez de círculos nos muestre los caracteres en texto de la contraseña. Para ello pinchamos con el botón derecho en el cuadro donde aparece nuestra contraseña oculta y realizamos click en Inspeccionar elemento:

Tras esto nos aparecerá el código html de la página y tendremos la línea concreta que afecta cuadro que alberga nuestra contraseña. Para que muestre el texto de la contraseña solo tendremos que cambiar el valor de la variable type de password (type="password") a text (type="text") tal y como muestro en las 2 capturas siguientes:





Como hemos comprobado es muy sencillo descubrir una contraseña que tengamos guardada en el navegador. Mi recomendación es que nunca guardemos las contraseñas aquí, lo más adecuado es usar algún programa como por ejemplo keepass donde se almacenan de una manera segura y gracias a la cantidad de plugins que tiene podremos iniciar sesión en una web de una manera rápida, cómoda y segura.