Resolución Problema Prog. Lineal Entera Binaria Con CVXOPT. Python 3

Hola 🙂

PARA INSTALAR CVXOPT CONSULTA ANTES EL SIGUIENTE ARTÍCULO:

[web]

CÓMO INSTALAR CVXOPT

[/web]

Consideremos el siguiente problema de Programación Lineal Entera Binaria:

Max:; f(x_1,x_2,x_3,x_4,x_5)=3x_1+2x_2-5x_3-2x_4+3x_5
s.a. begin{cases} x_1+x_2+x_3+2x_4+x_5 le 4 \ 7x_1+3x_3-4x_4+3x_5 le 8 \ 11x_1-6x_2+3x_4-3x_5 ge 3\ x_j in {0,1} end{cases}

Antes de programarlo con Cvxopt debemos convertirlo a un problema de minimización y convertir las desigualdades de mayor o igual que a menor igual que, así:

Min:; f(x_1,x_2,x_3,x_4,x_5)=-3x_1-2x_2+5x_3+2x_4-3x_5
s.a. begin{cases} x_1+x_2+x_3+2x_4+x_5 le 4 \ 7x_1+3x_3-4x_4+3x_5 le 8 \ -11x_1+6x_2-3x_4+3x_5 le -3\ x_j in {0,1} end{cases}

Éste paso previo es fácil y todo el mundo que conoce algo de Programación Lineal debe saberlo. Ahora sólo resta tener en cuenta que en nuestro código cvxopt para introducir la matriz de coeficientes de la región lo haremos por columnas y no por filas. Para hacerlo con cvxopt debemos importar su módulo GLPK, que es un fork en Python de las librerías en C++ de GLPK. El código es el siguiente:


from cvxopt import glpk
from cvxopt.base import matrix as m

c = m([-3., -2., 5., 2., -3.])
A = m([[1., 7., -11.], [1., 0., 6.], [1., 3., 0.], [2., -4., -3.], [1., 3., 3.]])
b = m([4., 8., -3.])
intVars = range(5) #Especificamos que las 5 variables son enteras
binVars = range(5) #Especificamos que las 5 variables son binarias
sol = glpk.ilp(c, A, b, I=set(intVars), B=set(binVars))
print('Los valores óptimos de las variables son: {0}n'.format(sol[1]))
if sol[0]=='optimal':

print('El valor óptimo es {0}'.format((-c.T*sol[1])[0]))
# El valor óptimo debemos transponerlo y cambiarle el signo, estamos maximizando.

else:

print('El problema no devolvió una solución óptima. El estado del solucionador fue {0}'.format(sol[0]))

La solución del problema es la siguiente:

[terminal]

/usr/bin/python3 /home/tobal/ProgramasPython3/proglinenterabinaria2.py
GLPK Integer Optimizer, v4.45
3 rows, 5 columns, 13 non-zeros
5 integer variables, all of which are binary
Preprocessing…
1 constraint coefficient(s) were reduced
3 rows, 5 columns, 13 non-zeros
5 integer variables, all of which are binary
Scaling…
A: min|aij| =  1.000e+00  max|aij| =  1.100e+01  ratio =  1.100e+01
GM: min|aij| =  6.077e-01  max|aij| =  1.646e+00  ratio =  2.708e+00
EQ: min|aij| =  3.693e-01  max|aij| =  1.000e+00  ratio =  2.708e+00
2N: min|aij| =  1.875e-01  max|aij| =  7.500e-01  ratio =  4.000e+00
Constructing initial basis…
Size of triangular part = 3
Solving LP relaxation…
GLPK Simplex Optimizer, v4.45
3 rows, 5 columns, 13 non-zeros
0: obj =   0.000000000e+00  infeas =  3.750e-01 (0)
*     1: obj =  -8.181818182e-01  infeas =  0.000e+00 (0)
*     5: obj =  -7.000000000e+00  infeas =  0.000e+00 (0)
OPTIMAL SOLUTION FOUND
Integer optimization begins…
+     5: mip =     not found yet >=              -inf        (1; 0)
+     6: >>>>>  -5.000000000e+00 >=  -6.000000000e+00  20.0% (2; 0)
+     6: mip =  -5.000000000e+00 >=     tree is empty   0.0% (0; 3)
INTEGER OPTIMAL SOLUTION FOUND
Los valores óptimos de las variables son: [ 1.00e+00]
[ 1.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]

El valor óptimo es 5.0

Process finished with exit code 0

[/terminal]

En resumen, con Cvxopt obtenemos los resultados esperados con un código sencillo y nítido, usando software libre. Espero que esto le sirva a alguien.

Saludos 🙂

Instalando Cvxopt En Ubuntu Con Python 3

Hola 🙂 He escrito bastante sobre estas librerías basadas en Python para poder resolver distintos programas basados en Optimización o Programación Lineal (Entera, binaria) o No Lineal. Voy a escribir cómo instalarlo de una forma más completa para poder resolver problemas de tipo Lineal Entera (Binaria), por ejemplo. Lo primero es instalar ciertas dependencias suplementarias, lo puedes hacer desde Synaptic o desde la terminal.

[terminal]

sudo apt-get install libblas-dev libatlas-dev libgsl0-dev libfftw3-dev libglpk-dev libdsdp-dev

[/terminal]

Ahora hay que descargar Cvxopt de su web oficial:

[web]

DESCARGAR CVXOPT

[/web]

Una vez descargado lo descomprimes y editas el fichero setup.py de forma que te quede así:

[nota]

from distutils.core import setup, Extension
from glob import glob

# Modifiy this if BLAS and LAPACK libraries are not in /usr/lib.
BLAS_LIB_DIR = ‘/usr/lib’

# Default names of BLAS and LAPACK libraries
BLAS_LIB = [‘blas’]
LAPACK_LIB = [‘lapack’]
BLAS_EXTRA_LINK_ARGS = []

# Set environment variable BLAS_NOUNDERSCORES=1 if your BLAS/LAPACK do
# not use trailing underscores
BLAS_NOUNDERSCORES = False

# Set to 1 if you are using the random number generators in the GNU
# Scientific Library.
BUILD_GSL = 1

# Directory containing libgsl (used only when BUILD_GSL = 1).
GSL_LIB_DIR = ‘/usr/lib’

# Directory containing the GSL header files (used only when BUILD_GSL = 1).
GSL_INC_DIR = ‘/usr/include/gsl’

# Set to 1 if you are installing the fftw module.
BUILD_FFTW = 1

# Directory containing libfftw3 (used only when BUILD_FFTW = 1).
FFTW_LIB_DIR = ‘/usr/lib’

# Directory containing fftw.h (used only when BUILD_FFTW = 1).
FFTW_INC_DIR = ‘/usr/include’

# Set to 1 if you are installing the glpk module.
BUILD_GLPK = 1

# Directory containing libglpk (used only when BUILD_GLPK = 1).
GLPK_LIB_DIR = ‘/usr/lib’

# Directory containing glpk.h (used only when BUILD_GLPK = 1).
GLPK_INC_DIR = ‘/usr/include’

# Set to 1 if you are installing the DSDP module.
BUILD_DSDP = 0

# Directory containing libdsdp (used only when BUILD_DSDP = 1).
DSDP_LIB_DIR = ‘/usr/lib’

# Directory containing dsdp5.h (used only when BUILD_DSDP = 1).
DSDP_INC_DIR = ‘/usr/include/dsdp’

# No modifications should be needed below this line.

extmods = []

# Macros
MACROS = []
if BLAS_NOUNDERSCORES: MACROS.append((‘BLAS_NO_UNDERSCORE’,»))

# optional modules

if BUILD_GSL:
gsl = Extension(‘gsl’, libraries = [‘m’, ‘gsl’] + BLAS_LIB,
include_dirs = [ GSL_INC_DIR ],
library_dirs = [ GSL_LIB_DIR, BLAS_LIB_DIR ],
extra_link_args = BLAS_EXTRA_LINK_ARGS,
sources = [‘src/C/gsl.c’] )
extmods += [gsl];

if BUILD_FFTW:
fftw = Extension(‘fftw’, libraries = [‘fftw3’] + BLAS_LIB,
include_dirs = [ FFTW_INC_DIR ],
library_dirs = [ FFTW_LIB_DIR, BLAS_LIB_DIR ],
extra_link_args = BLAS_EXTRA_LINK_ARGS,
sources = [‘src/C/fftw.c’] )
extmods += [fftw];

if BUILD_GLPK:
glpk = Extension(‘glpk’, libraries = [‘glpk’],
include_dirs = [ GLPK_INC_DIR ],
library_dirs = [ GLPK_LIB_DIR ],
sources = [‘src/C/glpk.c’] )
extmods += [glpk];

if BUILD_DSDP:
dsdp = Extension(‘dsdp’, libraries = [‘dsdp’] + LAPACK_LIB + BLAS_LIB,
include_dirs = [ DSDP_INC_DIR ],
library_dirs = [ DSDP_LIB_DIR, BLAS_LIB_DIR ],
extra_link_args = BLAS_EXTRA_LINK_ARGS,
sources = [‘src/C/dsdp.c’] )
extmods += [dsdp];

# Required modules

base = Extension(‘base’, libraries = [‘m’] + LAPACK_LIB + BLAS_LIB,
library_dirs = [ BLAS_LIB_DIR ],
define_macros = MACROS,
extra_link_args = BLAS_EXTRA_LINK_ARGS,
sources = [‘src/C/base.c’,’src/C/dense.c’,’src/C/sparse.c’])

blas = Extension(‘blas’, libraries = BLAS_LIB,
library_dirs = [ BLAS_LIB_DIR ],
define_macros = MACROS,
extra_link_args = BLAS_EXTRA_LINK_ARGS,
sources = [‘src/C/blas.c’] )

lapack = Extension(‘lapack’, libraries = LAPACK_LIB + BLAS_LIB,
library_dirs = [ BLAS_LIB_DIR ],
define_macros = MACROS,
extra_link_args = BLAS_EXTRA_LINK_ARGS,
sources = [‘src/C/lapack.c’] )

umfpack = Extension(‘umfpack’,
include_dirs = [ ‘src/C/SuiteSparse/UMFPACK/Include’,
‘src/C/SuiteSparse/AMD/Include’,
‘src/C/SuiteSparse/AMD/Source’,
‘src/C/SuiteSparse/SuiteSparse_config’ ],
library_dirs = [ BLAS_LIB_DIR ],
define_macros = MACROS + [(‘NTIMER’, ‘1’), (‘NCHOLMOD’, ‘1’)],
libraries = LAPACK_LIB + BLAS_LIB,
extra_compile_args = [‘-Wno-unknown-pragmas’],
extra_link_args = BLAS_EXTRA_LINK_ARGS,
sources = [ ‘src/C/umfpack.c’,
‘src/C/SuiteSparse/UMFPACK/Source/umfpack_global.c’,
‘src/C/SuiteSparse/UMFPACK/Source/umfpack_tictoc.c’ ] +
[‘src/C/SuiteSparse/SuiteSparse_config/SuiteSparse_config.c’] +
glob(‘src/C/SuiteSparse_cvxopt_extra/umfpack/*’))

# Build for int or long?
import sys
if sys.maxsize > 2**31: MACROS += [(‘DLONG’,None)]

cholmod = Extension(‘cholmod’,
library_dirs = [ BLAS_LIB_DIR ],
libraries = LAPACK_LIB + BLAS_LIB,
include_dirs = [ ‘src/C/SuiteSparse/CHOLMOD/Include’,
‘src/C/SuiteSparse/COLAMD’,
‘src/C/SuiteSparse/AMD/Include’,
‘src/C/SuiteSparse/COLAMD/Include’,
‘src/C/SuiteSparse/SuiteSparse_config’ ],
define_macros = MACROS + [(‘NPARTITION’, ‘1’), (‘NTIMER’, ‘1’)],
extra_link_args = BLAS_EXTRA_LINK_ARGS,
sources = [ ‘src/C/cholmod.c’ ] +
[‘src/C/SuiteSparse/AMD/Source/’ + s for s in [‘amd_global.c’,
‘amd_postorder.c’, ‘amd_post_tree.c’, ‘amd_2.c’]] +
[‘src/C/SuiteSparse/COLAMD/Source/’ + s for s in [‘colamd.c’,
‘colamd_global.c’]] +
[‘src/C/SuiteSparse/SuiteSparse_config/SuiteSparse_config.c’] +
glob(‘src/C/SuiteSparse/CHOLMOD/Core/c*.c’) +
glob(‘src/C/SuiteSparse/CHOLMOD/Cholesky/c*.c’) +
[‘src/C/SuiteSparse/CHOLMOD/Check/cholmod_check.c’] +
glob(‘src/C/SuiteSparse/CHOLMOD/Supernodal/c*.c’) )

amd = Extension(‘amd’,
include_dirs = [ ‘src/C/SuiteSparse/AMD/Include’,
‘src/C/SuiteSparse/SuiteSparse_config’ ],
define_macros = MACROS,
sources = [ ‘src/C/amd.c’ ] + glob(‘src/C/SuiteSparse/AMD/Source/*.c’) )

misc_solvers = Extension(‘misc_solvers’,
libraries = LAPACK_LIB + BLAS_LIB,
library_dirs = [ BLAS_LIB_DIR ],
define_macros = MACROS,
extra_link_args = BLAS_EXTRA_LINK_ARGS,
sources = [‘src/C/misc_solvers.c’] )

extmods += [base, blas, lapack, umfpack, cholmod, amd, misc_solvers]

setup (name = ‘cvxopt’,
description = ‘Convex optimization package’,
version = ‘1.1.6’,
long_description = »’
CVXOPT is a free software package for convex optimization based on the
Python programming language. It can be used with the interactive Python
interpreter, on the command line by executing Python scripts, or
integrated in other software via Python extension modules. Its main
purpose is to make the development of software for convex optimization
applications straightforward by building on Python’s extensive standard
library and on the strengths of Python as a high-level programming
language.»’,
author = ‘M. Andersen, J. Dahl, and L. Vandenberghe’,
author_email = ‘martin.skovgaard.andersen@gmail.com, dahl.joachim@gmail.com, vandenbe@ee.ucla.edu’,
url = ‘http://abel.ee.ucla.edu/cvxopt’,
license = ‘GNU GPL version 3’,
ext_package = «cvxopt»,
ext_modules = extmods,
package_dir = {«cvxopt»: «src/python»},
packages = [«cvxopt»])

[/nota]

Muy bien, seguidamente desde la terminal compilamos para Python 3 con el siguiente comando:

[terminal]

python3 setup.py build

[/terminal]

Cuando termina de compilar, dentro de la carpeta build que se habrá creado verás una carpeta llamada cvxopt, dicha carpeta la copias en tu sistema dentro de la ruta: /usr/lib/python3/dist-packages . Lo puedes hacer desde la terminal y gráficamente con el siguiente comando:

[terminal]

gksu nautilus /usr/lib/python3/dist-packages

[/terminal]

Eso es todo, ahora ya puedes resolver problemas de Programación Lineal Entera y Binaria con  Cvxopt bajo Pyt4hon 3 en tu Ubuntu. De una forma muy similar lo podrás hacer en cualquier otro sistema Gnu/Linux.

No he conseguido que haya soporte para DSDP, supongo que se debe a que las DSDP de mi Ubuntu están desactualizadas.  El soporte de MOSEK no viene en los repositorios de Ubuntu por no ser libre, deberás instalarlo antes por tu cuenta.

En un artículo posterior detallaré cómo resolver problemas de Programación Lineal Entera Binaria con estas librerías.

Saludos 🙂

He Vuelto A Ubuntu

Hola 🙂

Fondo Ubuntu
Fondo Ubuntu Saucy Salamander

Supongo que esto no le interesa a casi nadie, pero me apetece escribir sobre ello. Desde el sábado he dejado Rosa Mandriva y me he vuelto a Ubuntu, la Saucy Salamander. ¿Motivos?, bueno unos cuantos. Lo primero es que se rompió mi Rosa de mala manera, llevaba ya casi 3 años con la misma versión y al final petó. Luego estaba buscando una distro linuxera que tuviese sus programas matemáticos y de programación bastante actualizados o de fácil obtención.

Probé con ArchLinux bajo máquina virtual y no me convenció. Es cierto que con Arch puedes estar muy actualizado, pero sólo si añades los Yaourt. Cada vez que instalas o actualizas por el Yaourt te compila el paquete, eso es un pérdida de tiempo monumental. Imagina que lo haces para Octave, el sólo necesita casi una hora de compilación, eso es un atraso total. Arch debería tener un Launchpad o el maravilloso ABF de Rosa, entonces sí sería una auténtica Rollin Release. Por no contar las pirulas que hay que hacer para instalarla, sí, ya sé, existe Manjaro, pero no soluciona Yaourt. Yo flipo con la peña que dice que Arch lo puede instalar y mantener cualquiera, eso es rotundamente falso. Normalmente esta gente lo instala con Virtualbox y de ahí no pasa, así cualquiera. Son gente no honesta.

El caso es que me cansé de empaquetar programas, sea en RPM o en DEB, me quita tiempo. Luego los comparto en repositorios semi-oficiales y no le interesan a nadie. Muchos problemas para empaquetar programas como Maxima u Octave, ni que contar el de Scilab. Con Ubuntu estoy bastante actualizado en estas cosas y sin tener que empaquetar nada. Esta vez sólo he tenido dificultades para Texlive y Spyder, pero me he pasado por Debian Packages y listo.

La instalación de Ubuntu no ha sido sencilla, no se dejaba instalar, se quedaba pillá debido a los drivers estos de Nouveau. También me pasó con OpenSuse y Manjaro. Empecé a sospechar y en UbuntuForums encontré la solución, había que editar las opciones de arranque del Live-Usb. Luego todo fue coser y cantar, aunque me tiré toda una tarde para averiguarlo. Estoy hasta los cojones de los tutoriales de instalación de distros linuxeras con VirtualBox, son una mierda, ¡ea!

En la instalación me hice por primera vez una partición boot de 100mb en formato ext4, creí que no serviría de mucho, pero me equivoqué, tio mira es mano de santo, te lo recomiendo. No he creado una partición home, no me convence en  absoluto, lo veo inútil.

El Ubuntu lo he dejado con Unity, ha mejorado mogollón desde que lo dejé, hará ya 3 ó 4 años de ello, o algo así. Sólo le he cambiado el tema GTK y el de iconos. El tema GTK es MediterraneanLight y los iconos son Mint-X, nada espectacular pero me gusta. El Wallpaper unas montañas nevadas que ya venía en el Kit de instalación. No he instalado los drivers nVidia propietarios, creo que no se llevan bien con Ubuntu. No se, por ahora todo me funciona bien con los Nouveu.

En cuanto a programas para matemáticas los he podido encontrar todos actualizados, bien por repositorios oficiales, o bien desde las web principales de los propios desarrolladores: Maxima, wxMaxima, Octave, qtOctave, Rstudio, R-Cran, rkward, etc.

Lo que más me molesta es la barra lateral izqda. de Unity, ocupa mucho espacio. He intentado ocultarla automáticamente pero no lo hace bien, para aparecer/desaparecer al poner el ratón tarda demasiado; no se si es un bug o qué. Por lo demás, todo muy bien, va muy fino.

Eso sí, lo primero que instalé fue Synaptic y GDebi, nunca deberían haber desaparecido. Lo de Synaptic ahora mismo es la polla, instalando paquetes me daba a veces paquetes rotos, pero tiene la opción de reparar paquetes rotos que parece magia, ha mejorado mogollón. Debería ser el programa por defecto para los newbies para instalar programas, y no ese de Centro De Software o como se llame, que sólo es un escaparate a lo Youtube, una mierda; antes por terminal 😀

Esto no quiere decir que no vuelva a Rosa-Mandriva, simplemente me apetecía cambiar y he cambiado. Y por ahora estoy a gusto, es que le he quitado toda la mierda de la publi de los lens y no visito el Software Center ese de mierda de Ubuntu jejejeje. Sigo pensando que empaquetar con RPM es más sencillo, más esquemático, más matemático. El formato DEB es demasiado expansivo, demasiados ficheros, en RPM con el fichero spec es suficiente, eso debería copiarlo DEBIAN. Los desarrolladores linuxeros no deberían mirarse tanto el ombligo, y sí compartir y aunar conocimientos para destrozar Apple y Microsoft, dos putos esclavistas de mierda.

Y bueno, estas son algunas de mis tribulaciones por el mundo linuxero, el cual me siento muy cómodo, feliz y convencido de que uso un software que es para todos, no para los ricos.

Saludos 🙂

Estadística En Linux Con Sofa

Hola 🙂 , hace ya tiempo que vengo empaquetando éste programa para Mandriva mediante MIB. Sofa es un programa con  una interfaz muy cómoda, con el cual podemos trabajar para crear nuestras tablas estadísticas, al igual que sus gráficos relacionados.

Por ejemplo, podemos crear nuestra tabla ANOVA, trabajar con estadísticos Chi-Cuadrado, Correlaciones de Pearson y Spearman, Tests con T-Student, etc. Y por supuesto crear frecuencias relativas, absolutas y demás.

En cuanto a gráficos: Diagramas de barra, Pie Charts (Diagramas de Tarta), Diagramas de Caja, etc, etc, todos ellos fácilmente editables, para poder cambiar colores, tamaños, etiquetas, etc.

Es un programa muy completo que desde mi punto de vista cubre fácilmente cualquier asignatura de primeros años de Estadística en una Licenciatura sin tener que recurrir a lenguajes como R-CRAN o al software privativo de SPSS. En caso de profundizar más en el tema siempre nos queda en el software libre el poder utilizar un programa con entorno gráfico para el lenguaje R, como es Rkward.

Sofa se puede instalar en las tres plataformas más conocidas: Linux, Mac-OS y Windows. En la web oficial hay paquetes específicos para Debian, Ubuntu y derivadas.

Para los usuarios de Mandriva 2011.0 o ROSA 2012.0 he creado el paquete instalador, pero esta vez ya no va a estar disponible en MIB si es que no hay alguien que lo empaquete de MIB (cosa que dudo). Lo he puesto en mi cuenta de MediaFire, espero en breve poder subirlo a Mandriva Cooker, cuando me entere cómo subir programas no existentes todavía en el repositorio.

[descarga]

DESCARGAR SOFA 1.1.6 PARA MANDRIVA

[/descarga]

En definitiva, un gran programa enfocado  a la educación, de licencia libre; y que desgraciadamente es bastante desconocido. Actualmente sólo interesa lo fácil, el que me lea ya sabe a lo que voy 😉

Dejo un video demostrativo del programa que visualiza muy bien cómo son los diagramas que podemos crear con el programa. La ayuda de cómo funciona el programa es muy completa y se puede acceder a ella con un click desde la misma pantalla de inicio del programa.

[web]

SOFA STATISTICS OFFICIAL HOME PAGE

[/web]

Saludos 🙂

Dibujar Funciones A Trozos Discontinuas Con Sagemath

Hola, hace tiempo que quería saber dibujar funciones a trozos discontinuas con algún software matemático, pero la falta de tiempo libre y las ganas siempre ganaban. Hoy he tenido tiempo para investigar un poco.

Primero lo he intentado con WxMaxima, pero me unía las discontinuidades con el comando wxplot2d, lo he solucionado cargando el paquete draw, pero el código es demasiado largo. Me  he ido a Sagemath mediante la ejecución de Cantor, y he obtenido resultados óptimos y con muy poco código. Definitivamente Sagemath es de lejos el mejor software matemático actualmente, junto con Geogebra. Los dos son libres y muy bien presentados.

Veamos un  par de ejemplos,

f(x)=  begin{cases}  4 & mbox{si}quad x<-2 \  -2x & mbox{si}quad -2le xle 0 \  x^2+1 & mbox{si}quad x>0  end{cases}

Esta función presenta una discontinuidad de salto finito. La definiremos en Sagemath con el comando Piecewise, y la dibujaremos con el comando plot. Aquí el código:

[notavacio]

x=var(‘x’);

f=Piecewise([[(-5,-2),4],[(-2,0),-2*x],[(0,5),x^2+1]])

f.plot( ).show(xmin=-4, xmax=4, ymin = 0, ymax = 5, aspect_ratio=1)

[/notavacio]

Veamos un último ejemplo con una función a trozos que presenta una discontinuidad de salto infinito, la función es la siguiente:

f(x)=  begin{cases}  frac{1}{x} & mbox{si}quad x<0 \  sqrt{x} & mbox{si}quad xge 0 \  end{cases}

Para dibujarla utilizaremos los dos comandos anteriores junto con la suma del comando line para dibujar las semi-asíntotas verticales y horizontales, coincidente con los ejes. El código es:

[notavacio]

g=Piecewise([[(-5,0),1/x],[(0,5),sqrt(x)]])

g.plot( xmin=-4, xmax=4, ymin = -5, ymax = 5, aspect_ratio=1,detect_poles=’show’)+ line([(0,-5), (0,0)],color=’red’,linestyle=’–‘,thickness=’2′)+ line([(-5,0), (0,0)],color=’red’,linestyle=’–‘,thickness=’2’)

[/notavacio]

Y los resultados son los siguientes:

Saludos 🙂

Recomiendo Synaptic Para Ubuntu

Hola, bueno llevo tiempo viendo que Ubuntu ha decidido no instalar el gestor de paquetes Synaptic por defecto en Ubuntu, desde Natty. A mi, personalmente, me parece una decisión errada. Es cierto que el nuevo gestor de paquetería de Ubuntu es muy chulo, con sus iconos, su publi y demás cosas, pero no te da el poder para controlar tus paquetes instalados de una forma sencilla como lo hace Synaptic.

También es cierto que contamos con Ubuntu Tweak Tool, pero en cuanto tenemos paquetes rotos o incompatibilidad de versiones en paquetes no lo soluciona, y como mucho te tira un mensaje del tipo «Arregle sus paquetes rotos».

Con Synaptic es bastante intuitivo hacer cosas como:

1. Arreglar paquetes rotos.

2. Arreglar incompatibilidades en versiones de paquetes.

3. Tener los paquetes listados por tipo de repositorio.

4. Eliminar paquetes obsoletos.

5. Conocer los nuevos paquetes añadidos a los repositorios.

6. Tener un listado completo de los instalados y los no instalados.

7. Si eres programador o te divierte programar es fácil añadir las librerías de desarrollo.

8. Desinstalar paquetes en su totalidad y posibles dependencias.

9. O instalar más dependencias, viene muy bien para instalar programas como Anjuta, y añadirle más dependencias, por ejemplo.

10. Añadir y quitar repositorios está tirao 😉

Eso y muchas cosas más, muy útiles y que con un par de clics puedes solucionarlo.

Otra cosa muy importante, viene muy bien para actualizar tu Ubuntu, si no haces una instalación limpia. Personalmente me ha venido muy bien cuando actualicé a Natty y ahora para tener Oneiric.

Y es que quiero hacer hincapié en un asunto importante, veo que en muchos blogs, desde hace tiempo, vienen diciendo que si quieres actualizar tu Ubuntu a una nueva versión sólo has de teclear ALT+F2 y escribir el conocido comando:

[notavacio]

update-manager -d

[/notavacio]

Y eso no es del todo cierto, lo mejor es primero desactivar todos los repositorios de terceros que tengamos, como los de Launchpad, Getdeb, etc. Esto se puede hacer muy fácil desde Synaptic, desde su menú tenemos la opción «Repositorios». Luego, tendremos que actualizar los paquetes de nuestro Ubuntu instalado.

Después aplicar el comando anterior, aún así nos puede abortar la actualización por incompatibilidad con algunos paquetes, que deberemos desinstalar; normalmente son librerías, y una forma cómoda de quitarlas es con Synaptic.

Luego si todo ha ido bien con la actualización, al reiniciar nuestra nueva versión de Ubuntu si actualizamos el sistema podemos obtener todavía problemas de paquetes rotos y demás; y la forma más cómoda es hacerlo con Synaptic.

Todo esto lo escribo como mero consejo, de alguien que usa Linux desde ya hace unos cuantos añitos, y que espero que le sirva de ayuda a la gente, sobretodo a aquellos que todavía no tienen mucha experiencia.

Así pues, instala Synaptic 😉 al principio puede parecer un poco difícil manejarlo, pero con un poquito de tiempo y ganas se obtiene unos resultados inmejorables para dominar posibles problemas con tu Ubuntu.

Saludos 🙂

Encabezado Y Pie Con LYX

Hola 🙂 Bien, voy a explicar cómo añadir encabezados y pies de página con LYX de una forma fácil y cómoda. He visto en muchos sitios cómo hacerlo, pero en todos hay que aprender muchos códigos de LateX, así que probando con LYX he llegado ha hacerlo bastante fácil 😉

Lo que voy a explicar sirve para hacerlo en Linux, Windows y Mac indistintamente. Lo primero es tener instalado el paquete de LateX FancyHdr, esto no hay problema porque ya vendrá instalado 😉

Abrimos LYX con un documento nuevo, supondremos que el documento es un article.

Primero cargaremos los módulos de forma predeterminada, para ello vamos a:

[notavacio]

Documento->Configuración->Módulos

[/notavacio]

De la columna de la izquierda elegid:

[notavacio]

Encabezado/Pie personalizados

Notas finales

Pies al final

[/notavacio]

Presionar en Guardar como predeterminados y Aplicar, primer paso hecho. Esto sólo hay que hacerlo una vez.

Seguidamente hay que ir al menú de LYX y seguir esta ruta:

[notavacio]

Documento->Configuración->Diseño de Página

[/notavacio]

En la opción Estilo de encabezado y pie desplegamos el menú y elegimos elaborado , le damos a Aplicar y ya está. Si no queremos hacer éste paso cada vez que hacemos un documento basta dar al botón Guardar Como Predeterminados. Con esto estamos cargando el paquete FancyHdr.

Bien, ahora desde nuestro documento en el menú de botones nos vamos al menú desplegable que pone Normal, ahí podemos añadir el encabezado y los pies de página eligiendo:

[notavacio]

Encabezado_Izquierdo

Encabezado central

Encabezado_Derecho

Pie izquierdo

Pie central

Pie_Derecho

[/notavacio]

Cada vez que le demos a una de las opciones nos aparecerá en nuestro documento su respectivo texto en color verde, ahí al lado podemos escribir el texto que deseemos o el código látex que deseemos. Podemos añadir una imagen fácilmente desde Lyx también, incluso con calidad usando pgfplots.

Si queremos que el número de página aparezca en el Pie Central lo tendremos así:

Pie central: thepage

Si queremos que nos aparezca una línea en el pie de página hay que añadir el código en Latex al final:

[notavacio]

renewcommand{footrulewidth}{0.4pt}

[/notavacio]

Para el Encabezado la línea ya nos la añade LyX.  Y ya está, así de sencillo es 😉 con esto obtenemos un encabezado y un pie de página con mucha clase, rápido y sencillo, con muy poco código.

Una cosa a tener en cuenta, todo hay que añadirlo al principio del documento, pero si a nuestro documento le hemos añadido un Título, hay que añadirlo en la página siguiente a nuestro título o dará error.

Si alguien quiere un mayor control de FancyHdr se puede consultar en el blog de Un Bioinformatiquillo en el enlace

[webvacio]

Paquete FancyHdr

[/webvacio]

[nota]

Agradecimientos a Edson de Forogeometras por recordarme que primero hay que tener cargados los módulos. Gracias Edson 🙂

[/nota]

Saludos 🙂

Dibujar Gráficas Con Lyx (LateX)

Hola 🙂 Desde hace un tiempo he estado mirando unos paquetes adicionales de LateX con los cuales podemos dibujar funciones matemáticas, figuras geométricas, circuitos electrónicos, esquemas, diagramas de flujo y muchas otras cosas con LateX.

El paquete principal se llama TikZ-PGF, con éste podemos dibujar infinidad de cosas. Luego hay un subpaquete del anterior llamado PgfPlots, que va más enfocado a facilitarnos aún más el código para dibujar funciones matemáticas en 2 y 3 dimensiones. Y además, también existe 0tro subpaquete de PGF llamado TikZ-3dplot que está dedicado exclusivamente a dibujos en 3 dimensiones.

Con los tres paquetes instalados podemos dibujar funciones matemáticas explícitas, en paramétricas, en coordenadas rectangulares, polares, esféricas, cilíndricas. También podemos dibujar funciones a partir de un fichero formado por una tabla de datos, la cual podemos haber obtenido a partir del software libre Gnuplot. También podemos dibujar funciones invocándolas con Gnuplot. Bueno y muchas cosas más, muchas.

La cuestión es que iba buscando algo así porque cuando pongo exámenes de matemáticas a veces debo poner gráficas de funciones y veo que es mucho mejor ponerla yo que sacarlas de por ahí, sobretodo para el temario de funciones entre 2º y 4º de la E.S.O, más 1º de Bachiller.

En fin, he de decir que PGF se encuentra en Ubuntu y Mandriva, aunque algo antiguas, mientras que las otras dos no se encuentran en los repositorios oficiales. Por ahora en Mandriva los he empaquetado y se pueden encontrar añadiendo los repositorios del MIB. En cuanto a Ubuntu, espero poder tenerlas pronto añadidas a mi repositorio de Launchpad, si eso ya lo notificaré por el blog.

Para los que estén interesados a instalarlos en Mandriva hay que instalar los siguientes paquetes:

[notavacio]

tetex-pgfplots tetex-tikz-3dplot

[/notavacio]

Con es0 ya lo tenéis todo instalado. Bien, resulta que para utilizarlos en LyX hemos de escribir en código LateX lo que vayamos a dibujar, y para ello hay que cargar primero los paquetes. Para cargar paquetes en LyX es muy sencillo, debemos tener un fichero nuestro abierto previamente, luego en el menú de LyX nos dirigimos a Documento->Configuración->Preámbulo LateX y ahí pondremos los siguientes comandos:

[notavacio]

Para PGF -> usepackage{tikz}

Para PgfPlots -> usepackage{pgfplots}

Para tikz-Plot3d-> usepackage{tikz-3dplot}

[/notavacio]

Para cuando queramos escribir código en LateX con LyX es suficiente presionar el botón TEX y escribir dentro del recuadro rojo el código que queramos.

Ya he dicho que con estos paquetes podemos invocar directamente a Gnuplot para dibujar funciones, esto es muy útil, por ejemplo, para dibujar funciones discontinuas, como la función tangente. Cuando invoquemos a Gnuplot si queremos luego poder visionar o convertir a formato PDF nuestro documento deberemos modificar una opción de Lyx, os digo cóm0 hacerlo.

Hay que ir en el menú de LyX a Herramientas->Preferencias-> Gestión de archivos->Convertidores. De la lista que nos sale marcamos LaTeX (pdflatex) -> PDF (pdflatex) Donde pone Convertidor lo modificamos a lo siguiente:

[notavacio]

pdflatex –shell-escape –file-line-error-style $$i

[/notavacio]

Seguidamente presionamos al botón «Modificar», después en «Aplicar», «Guardar», ya está. Todo esto he mirado en muchos sitios y no conseguía el comando, hasta que se me ocurrió probar con Geany y sonó la flauta 😀
Os dejo una imagen para vuestra ayuda 😉

Estos pasos sirven también para Windows, aunque tanto en Windows con en Linux hay que tener instalado el programa Gnuplot.

Veamos un  ejemplo, para dibujar una parábola:

[descargavacio]

DESCARGAR CÓDIGO LYX

DESCARGAR RESULTADO EN PDF

[/descargavacio]

Pero si queréis más ejemplos tenéis mogollón de ellos en las siguientes webs:

[webvacio]

Web Ejemplos TikZ-PGF

Web PGFPLOTS , los ejemplos están al final de la página.

[/webvacio]

En esas webs podréis apreciar el potencial de estos paquetes con LateX. Os dejo un enlace para descargaros toda la documentación oficial en formato PDF.

[descargavacio]

DESCARGAR DOCUMENTACIÓN

[/descargavacio]

Bueno espero que haya gente que esto le sirva de ayuda para ampliar conocimientos en LateX.

[fuentevacio]

TIKZ-PGF

PGFPLOTS

GNUPLOT

MIB

[/fuentevacio]

Saludos 🙂

Nuevos Programas Para Mi Repositorio En Ubuntu Natty

Hola 🙂 en el día de hoy me he dedicado a añadir actualizaciones de programas matemáticos para Ubuntu Natty, así como algunos nuevos. Los que hay disponibles por ahora  son:

[notavacio]

Carmetal -> 3.5.2

Elyxer -> 1.2.1

LapackPlus -> 2.5.4

Lyx -> 2.0.0

Mathpiperide -> 0.79f

Maxima -> 5.24.0

PyMathProg -> 4.2

TexMaker -> 3.0.2

wxMaxima -> 11.04..0

[/notavacio]

Tengo pensado en el transcurso de la semana añadir Geogebra en 3D con apoyo de Maxima, es un programa que ya está disponible desde hace semanas en Mandriva 2010.2.

Si tengo suerte en la debianización me gustaría poder actualizar Octave a la 3.4.0, pero esto me llevará tiempo, lo veo difícil y lo más seguro es que haya que esperar a Ocelot.

Si Ubuntu no actualiza Scilab lo actualizaré si tengo tiempo.

Para los que no sepan todavía cómo añadir el repositorio 😉

[terminalvacio]

sudo su –

add-apt-repository ppa:lopeztobal/maths

apt-get update && apt-get upgrade

exit

[/terminalvacio]

Y bueno eso es todo por ahora en lo que respecta al repositorio.

Saludos 🙂

Disponible Repositorio De Mates Para Ubuntu Natty

Hola 🙂 Después de haber arreglado mi Ubuntu para tener sesión clásica con Gnome 3 he habilitado mi repositorio en Launchpad dedicado a aplicaciones matemáticas para Natty. De momento he añadido la versión estable de LYX, la 2.0.0 y también he añadido la versión más estable de ELYXER, el cual sirve de apoyo para LYX, y que en los repositorios de Ubuntu está muy desactualizado.

Poco a poco iré añadiendo más pogramas o actualizaciones e iré informando en el blog para aquella gente que le interese el repositorio. En la medida de lo posible trataré de que los programas no tengan problemas de dependencias o bugs, así como añadiré las mejores debianizaciones posibles. Todos los programas los instaló antes y después de subirlos al repositorio para que hayan el menor número de problemas posibles.

Para los interesados en añadir el repositorio basta abrir terminal y escribir:

[terminalvacio]

sudo su –

add-apt-repository ppa:lopeztobal/maths

apt-get update && apt-get upgrade

exit

[/terminalvacio]

Soy consciente que sería muy bueno que el repositorio apareciese en Ubuntu-Tweak, pero desgraciadamente eso no será posible, ya que mi repositorio no es popular, como la música que mayoritariamente escucho 😀

Saludos 🙂