martes, 31 de mayo de 2016

Lenguaje de programación Julia para cálculo cientifico-técnico

En un post anterior mostraba un ranking de lenguajes de programación aplicados al entorno técnico, dentro del ranking general, vi uno que no había visto antes, se trata de Julia






Empecé a buscar datos de este lenguaje y esto es parte de lo que encontré.

Se trata de un lenguaje de programación enfocado a computación científica, no como python, que es de ámbito general pero con librerías enfocadas a este ámbito. 

Tiene la ventaja con respecto a Python de que ya incorpora de serie las librerías matemáticas.

Julia es un lenguaje de programación multiplataforma y multiparadigma de tipado dinámico, es decir que no es necesario declarar las variables antes de usarlas ( eso en otros tiempos asqueaba a algunos programadores, os acordais de Basic !!)

El nombre del lenguaje Julia fue puesto en honor a Gaston Julia, un matemático frances que fue uno de los primeros en estudiar  los fractales.

Es un lenguaje tipo Python, es decir puedes ejecutar en la línea de comandos, crear script y ejecutarlos, su punto débil  mi entender es el IDE, sólo he visto alguno, el que más me ha atraido es Juno,  lo probaré a ver que tal.


 La verdad es que lo que he visto me ha atraido, está muy centrado en cálculo numérico de alto desempeño.

En este enlace os dejo un manual


lunes, 30 de mayo de 2016

Python versus Octave encuentros en la primera fase


Hace no demasiado tiempo me bajé un manual de Python , gentileza del Instituto de Astrofísica de Andalucia), ese lenguaje tan de moda que aparece donde menos te lo esperas, y lo usa por lo visto hasta el gato.

No voy a entrar en detalles sobre la historia del lenguaje, ni sobre sus bondades o defectos si alguien siente curiosidad os dejo estos enlaces:

Lo que más me interesó de este lenguaje de propósito general, era la gran cantidad de librerias externas de ámbito cientifico-técnico que tiene, de entre todas me interesó una agrupación de ellas, denominada Anaconda, (otra nombre de serpiente), el listado de paquetes os los dejo en este enlace https://docs.continuum.io/anaconda/pkg-docs.

Pues nada me bajé Anaconda para 64 bits,  y como  necesitaba un IDE, lo más funcional posible y no demasiado pesado, me puse a buscar.

Existen algunos muy ligeros como Spider, que recuerda a MatLab ¿casualidad?,  seguí mirando y encontré Pycharm Community,  más pesado pero con más prestaciones, la verdad es que me gustó.

Lo instalé despues de Anaconda, configuré la localización del interprete de Python (eso me llevó poco tiempo), y ya estaba listo para ..... empollarme el manual de Python y la documentación sobre los paquetes de Anaconda que más me interesaban, entre ellos nos centramos en tres:
Además del que Python implementa por defecto que es :

Empezamos por el paquete Pyplot, y vamos a realizar algunas pruebas comparando los resultados con Octave. ????
 
Vamos a realizar algo sencillo, como  la representación gráfica de la función Seno entre los valores [-3Pi,3Pi], con incremento de 0.1, el código en Octave es :

% graficos del seno
x=-3*pi:0.1:3*pi;
y_sin=sin(x)
% formateo de los graficos
plot(x,y_sin,'b--')
xlabel(' Eje x')
ylabel(' Eje y')
title('Sin(x)')

Los resultados obtenidos son:


Y ahora nos vamos a Python, las primeras dudas del ignorante

 ¿ Python maneja operaciones de funciones matematicas tomando vectores como argumento , al igual que hace MatLab ??, pues efectivamente, con la librería Numpy.

 Y con la sublibrería pyplot de la libreria Matplotlib podemos graficar.

El código queda:



import numpy  # importamos la libreria matematica numpy
import matplotlib.pyplot as plt  # importamos la libreria grafica le ponemos el alias plt
# definimos los vectores
n_pi=numpy.pi  # valor de pi
x=numpy.arange(-3*n_pi,3*n_pi,0.1) # limites de la grafica
y=numpy.sin(x)

# graficamos
plt.plot(x,y,'b--')
plt.xlabel('Eje X')
plt.ylabel('Eje Y')
plt.title('Grafica del Seno')
plt.show()


el resultado es :


En cuanto a código se refiere, en Python hay que importar librerías, cosa que no es necesaria en Octave/MatLab para este tipo de acciones, pero esto no es relevante.

Lo que si me gusta de Python, bueno de la librería matplotlib.pyplot, es que defines todos los parámetros y después graficas con show(), esto parece que da cierto orden.

En lo que respecta al código, son muy similares, y sus resultados también.

Decantarse por uno, pues no hay criterio firme , en proximos post seguiremos comparando.
 





sábado, 28 de mayo de 2016

Puede Google predecir el resultado de las elecciones en España


Hace un par de días se actualizó en mi telefono, una de las aplicaciones instaladas por defecto en el sistema operativo Android, cuando terminó el proceso de instalación, me dediqué a comprobar los "cambios" que supongo motivan la actualización.

La aplicación en cuestión era google maps y casi instintivamente realicé una búsqueda por ejempo ¿donde comer?,  salieron las siguientes opciones:
  • Mejores lugares para comer
  • Para comer barato
  • Para comer cerca
Todas estas clasificaciones están supongo basadas en los comentarios de usuarios (las dos primeras) y por GPS, la tercera, pero había otra que me llamó la atención, quizá por que no suelo hacer búsquedas con esta herramienta, no sabía si ya estaba o era nueva, dicha opción era:

  • Los favoritos de los vecinos
Aquí ya me quedé un poco parado,  google es capaz de :

  • Definir personas que viven en una determinada zona, o están en un determinado sitio frente a otras que están de paso.
  • Generar patrones de comportamiento
  • Generar modelos predictivos
Y es en este último punto donde  enlazo con el título de la entrada, es posible que google en función de :

  • las apliciones que tengamos instaladas (prensa de cierta orientación politica por ejemplo)
  • busquedas en google, podemos consultar en google trends
  • comentarios en twitter, facebook etc
  • datos de elecciones pasadas por zona geográfica (que seguro las tienen)
  • otras 
Visto lo que es capaz de hacer, pienso que puede estar en posición de generar modelos de estimación de voto por zonas, para un pais entero, etc y la mejor pregunta
  • ¿quién puede acceder a estos datos?
  • ¿ se pueden comprar estos datos?
  • ¿ a quién le puede interesar?
Pensad sólo que las aplicaciones de tráfico de android están basadas en los datos de geolocalización de usuarios que se desplazan en sus vehículos, estamos totalmente localizados y además conocen nuestras aficiones (por las búquedas) y posiblemente sepan lo que pensamos.

Las aplicaciones gratis NO SON GRATIS, las pagados con nuestros datos.

Dos consejos (siempre que podais)



jueves, 26 de mayo de 2016

LENGUAJES DE PROGRAMACIÓN CIENTÍFICOS


Cuando estudiaba Ingeniería de Caminos en Granada, en una de las asignaturas, concretamente en Ingeniería de Sistemas, dentro de su temario, existía una parte que correspondía al lenguaje de programación  FORTRAN, ya entonces existían C y C++, y los paquetes MatLab, Mathematica, etc, pero nuestro plan de estudios se centraba en aquel lenguaje de programación con orientación científico-técnica y bastante criticado precisamente por aquellos que no lo usan y/o no lo conocen con algo de profundidad.

Desde entonces el panorama ha cambiado enormemente, existen nuevas implementaciones de FORTRAN, cuyo último estandar es el 2008. https://es.wikipedia.org/wiki/Fortran
Evidentemente existen  nuevas herramientas, libres y gratuitas  que implementan sus propios lenguajes de script, como son Scilab, Octave, Maxima, y de pago, MatLab, Mathematica etc  e implementaciones de lenguajes de propósito general con sus extensiones orientadas al cálculo científico.

Evidentemente los que he indicado (saltandome bastantes), son entornos y lenguajes científicos de  "propósito general", eso si con una  inclinación hacia el ámbito científico.

Dentro de los lenguajes de programación más populares con implementaciones científicas está como no podía ser, Python y sus extensiones Numpy, y Sympy, e incluso grupos de paquetes científicos completos  como es el caso de Anaconda.

Existen además otros entornos muy especializados con es el caso de R, con fuerte presencia en Minería de Datos y Estadistica en General.

No hace mucho me pasé por la página stackoverkill, y le di un vistazo a los ranking de uso de lenguajes de programación, y este es el resultado a fecha de mayo de 2016, en lo que respecta al uso de lenguajes y entornos científicos.

Se presentan dos grupos de lenguajes, los más usados, entre los que aparecen MatLab, Mathematica y Octave y otro grupo denominado Old & Dead, entre los que está FORTRAN, creo que injustamente.

Os dejo las gráficas del ranking.






 Estamos evidentemente hablando de lenguajes con usos muy específicos que no llegarán a la popularidad de los de uso genérico.















miércoles, 25 de mayo de 2016

LOS NÚMEROS PRIMOS DE MERSENNE

 

Un número de Mersenne es aquel que está definido por la expresion 2^n-1, es decir una unidad menos que una potencia de 2.
Un número primo de Mersenne es un número de Mersenne que además es primo, son por lo tanto una forma de "fabricar" números primos tan apreciados en encriptación.

Existen actualmente 49 números primos de Mersenne

El mayor número primo de Mersenne hasta la fecha es el 2^74207281-1, que pasó todas las pruebas de primalidad.

Para más información os dejo un par de links

https://es.wikipedia.org/wiki/N%C3%BAmero_primo_de_Mersenne

https://en.wikipedia.org/wiki/Mersenne_prime

En esta otra dirección está la Great Internet Mersenne Prime Search, proyecto distribuido a la búsqueda de este tipo de números primos

http://www.mersenne.org/

lunes, 23 de mayo de 2016

LOS NÚMEROS PRIMOS EN BÚSQUEDA Y CAPTURA




Los números primos, esa mala hierba que se encuentra oculta entre el oceano de números compuestos, los cuales no aparecen con pauta, ni orden, ni disciplina, ni mediante una fórmula que los genere.

Han sido noticia no hace mucho, supongo que algunos/as habréis conocido de  algunos comentarios sobre el posible delito que constituye la  posesión de números primos de más de mil cifras, por lo visto lo es en Estados Unidos ???.

¿ Hay números primos ilegales?, o ¿su posesión es ilegal?, perece que si.

https://es.wikipedia.org/wiki/N%C3%BAmero_primo_ilegal 
https://en.wikipedia.org/wiki/Illegal_prime


Os lo indico en algunos enlaces de noticias

http://es.gizmodo.com/en-los-estados-unidos-es-ilegal-poseer-o-distribuir-un-1774521368

http://verne.elpais.com/verne/2016/05/17/articulo/1463467060_546811.html

Un número  se considera primo cuando siendo natural distinto de 0 y 1,  únicamente es divisible por sí mismo y por 1.


Hay varios tipos de números primos:


El interes en los números primos radica en su uso en sistemas criptográficos de clave pública, entre estos destaca el RSA.
https://es.wikipedia.org/wiki/RSA



Uno de los condicionantes del sistema de encriptación RSA, es la de la generación aleatoria de números primos grandes, ello conlleva cierta dificultad, ya que en imprescindible comprobar la primalidad de los números usados.
Es por lo tanto necesario la generación de números primos aleatorios, y lo fundamental, comprobar su primalidad.
El conjunto de  herramientas  a usar para obtener este objetivo, se denominan ,tests de primalidad.
Como es de esperar hay varios tipos de test de primalidad :

  • Método de Euclides
  • Criba de Eratóstenes
  •  Test Verdaderos
  • Tests Probabilísticos
  • Test de primalidad AKS
  • y varios más
 No es de extrañar que dada la complejidad de encontrar un número  de estas características, aleatorio, con más de mil cifras  y primo, exista un mercado potencial de números primos, con objeto de implementarlo en sistemas de encriptación.



Para ir probando podeis usar la página : https://www.wolframalpha.com/
e introducir la instrucción: QPrime[n], donde n es el número primo n-esimo.
por ejemplo  QPrime[1], es 2.
O si os pica la curiosidad,  introducid la instrucción "random prime with 300 digits", os ofrecerá un número aleatorio primo de 300 dígitos.
Si lo intentáis con números con más cifras tenéis que esperar un buen rato, o incluso no os dará un resultado, caso de cifras muy elevadas.








lunes, 16 de mayo de 2016

MATEMATICA APLICADA A LA GEOTÉCNIA


CÁLCULO ANALÍTICO DE LA PRESIÓN DE PRECONSOLIDACIÓN


Para el cálculo de la presión de Preconsolidación por el método gráfico de Casagrande, como inicio es imprescindible conocer el punto de máxima curvatura de la curva edométrica.

 El método conocido por los técnicos que trabajan en este ámbito esta representado en la imagen de abajo.


 

 El  procedimiento es bastante sencillo, sólo seguir las reglas que Casagrande en su día planteó, abajo os dejo un video (prestado) en el que al autor realiza el cálculo usando las herramientas gráficas de excel, de forma bastante detallada


El valor final del cálculo es aproximadamente unos 30-31 kN/m2.

La duda surge ante la pregunta ¿distintos calculistas obtendrán el mismo valor?, la respuesta es NO.
Por la experiencia que tengo tanto en mi ámbito profesional, así como en el docente, los valores varían.

Por ello la creación de una herramienta que libere al técnico de la indeterminación del fatídico punto de máxima curvatura es esencial para la determinación del valor de la presión de preconsolidacion y ya que la creamos, pues que calcule también la presión de preconsolidación.

En las siguientes imágenes (ya de mi cosecha), se indican los pasos intermedios y el resultado final.

los pasos a seguir serían:

  • Con los puntos de la curva edométrica ajustamos un polinómio de cuarto grado (de mayor grado genera oscilaciones)
  • Obtenemos la función curvatura asociada al polinómio
  • Calculamos el extremo absoluto de la función curvatura
  • Ese punto será el punto de máxima curvatura de la curva edométrica
  • Aplicamos el procedimiento de Casagrande
  • Obtenemos el valor de la presión de preconsolidacion
En las siguientes imágenes se muestran los pasos intermedios

 En esta imagen se muestra la función curvatura, el extermo absoluto destaca bastante bién.

En esta otra imagen se muestra, la representación de la derivada de la función curvatura, se aprecia bastante bien el corte de la curva con y=0.

y por último
el resultado

el valor aproximado fue: 35.55 kN/m2 y ya que estamos calculando obtenemos también el coeficiente de compresibilidad que nos ha dado Cc=0,70879

El valor se parece bastante, pero ¿ que variación tendríamos entre una persona experta y otra novata??.

El código se ha desarrollado en MatLab y cuando esté completamente testeado lo colgaré







miércoles, 11 de mayo de 2016

CURSO DE DISEÑO ASISTIDO POR ORDENADOR

 
Interesante Curso de Diseño Asistido por Ordenador, que fue desarrollado en la plataforma Miriadax

Se trata de un muy buen trabajo desarrollado por el Catedrático D. Leonardo Fernandez Jambrina, que imparte docencia en la Universidad Politécnica de Madrid.

Destacar el contenido del curso :

  • Curvas Polinómicas
  • Curvas de Bezier
  • Curvas Racionales
  • Cónicas
  • Funciones B-Spline
  • Superficies
  • Superficies de Bezier
  • Superficies de revolución

No espereis un  curso de Autocad ni algo parecido, tiene un enfoque matematico de tratamiento de superficies y curvas.

Os dejo el enlace del playlist, espero que os sea de utilidad

https://www.youtube.com/playlist?list=PL8bSwVy8_IcMJ22RA-82jZLIprQKZfy18

En este video os dejo la presentación:

lunes, 9 de mayo de 2016

LA SUPERFICIE DE KLEIN

 
Y otra de superficies, en este caso la superficie de Klein, que entre sus características más destacables es la de que es una superficie no orientable, es decir no tiene ni interior ni exterior, al igual que la banda o cinta de Möbius.

El nombre que le dio su creador era el de "Superficie de Klein", descrita por primera vez por Felix Klein, aunque se conoce más una de sus variantes, la "Botella de Klein".

Para su visualización os dejo dos instrucciones en  Mathematica, la primera define la función de la superficie en paramétricas y la segunda dibuja la superficie.

surf[u_, v_] := {(3 + Cos[u/2] Sin[v] - Sin[u/2] Sin[2 v]) Cos[u], (3 + Cos[u/2] Sin[v] - Sin[u/2] Sin[2 v]) Sin[u],   Sin[u/2] Sin[v] + Cos[u/2] Sin[2 v]}

ParametricPlot3D[surf[u, v], {u, 0, 2 Pi}, {v, 0, 2 Pi},  PlotPoints -> {30, 30}]

El resultado es :

A que no es lo que esperabais, simplemente es porque hay que hablar de "Las superficies de Klein", de las que la más conocida es la "botella".

Las instrucciones para su representación, en Mathematica son estas :

surf[u_, v_] := {(-2/15) Cos[u] (3 Cos [v] - 30 Sin[u] + 90 Cos[u]^4 Sin[u] -60 Cos[u]^6 Sin[u] + 5 Cos[u] Cos[v] Sin[u]), (-1/15) Sin[ u] (3 Cos[v] - 3 Cos[u]^2 Cos[v] - 48 Cos[u]^4 Cos[v] + 48 Cos[u]^6 Cos[v] - 60 Sin[u] + 5 Cos[u] Cos[v] Sin[u] -5 Cos[u]^3 Cos[v] Sin[u] - 80 Cos[u]^5 Cos[v] Sin[u] + 80 Cos[u]^7 Cos[v] Sin[u]), (2/15) (3 + 5 Cos[u] Sin[u]) Sin[v]}


ParametricPlot3D[surf[u, v], {u, 0, 2 Pi}, {v, 0, 2 Pi},  PlotPoints -> {50, 50}]

Que en este caso nos da algo más conocido



 

 Para más información podeis consultar:

https://en.wikipedia.org/wiki/Klein_bottle
http://mathworld.wolfram.com/KleinBottle.html

y como no un video







domingo, 8 de mayo de 2016

LA BANDA DE MÖBIUS

 
Todos conocemos, o al menos hemos visto una superficie denominada "Banda de Möbius", que tiene entre otras propiedades tener una sóla cara y un solo borde.
Seguramente la encontrareis en algunas representaciones artísticas

Os dejo la instrucción para representarla en Mathematica y unos enlaces con información complementaria:

ParametricPlot3D[{(1 + 0.5  v Cos[u/2]) Cos[u], (1 + 0.5  v Cos[u/2]) Sin[u], v 0.5 Sin[0.5 u]}, {u, 0,
  2 Pi}, {v, -0.5, 0.5}]

la representacion quedaría :
 Entre los enlaces que os puedan ser de interés:


En este enlace se indica como construir una:





sábado, 7 de mayo de 2016

Iniciamos el Blog

el 07/05/2016 iniciamos la andadura de este blog, con una clara vocación de la difusión y el conocimiento de la Ingeniería Matemática.

Nos vemos