Programación científica en Python

Documentos relacionados
Recetario de gnuplot (versión 5.2)

Introducción a Python

Factorización LU y la librería GSL. Graficaciíon en Gnuplot

Factorización LU y la librería GSL

RESUMEN DEL PROGRAMA GNUPLOT

Transponer vectores Es cambiar los vectores fila por columna y se hacen con una comilla al final de la variable del vector. P.E

Pylab con Matplotlib

Guía rápida para gnuplot

Manual Rápido de Gnuplot

Curso - Taller Gnuplot

Electromagnetismo I. Semestre: Prof. Alejandro Reyes Coronado Ayud. Carlos Alberto Maciel Escudero Ayud. Christian Esparza López

Las operaciones aritméticas básicas en MATLAB son las más sencillas que se pueden

2.2 CREAR TABLAS Y GRÁFICOS.

Una forma fácil de recordar esta suma (regla de Sarrus): Primero vamos a estudiar algunas propiedades de los determinantes.

Breve introducción al OCTAVE

Electromagnetismo II. Solución Proyecto 1. Cuadrado

Matplotlib y otros graficadores

OPENOFFICE CALC. Más opciones de la hoja de cálculo

INTRODUCCIÓN A MATLAB. Laboratorio de Biofísica, U.T.P

BREVE INTRODUCCIÓN A gnuplot

Crear gráficos en Excel Un gráfico es la representación gráfica de los datos de una hoja de cálculo y facilita su interpretación.

Funciones en MATLAB. Prof. Saúl. Buitrago y Oswaldo Jiménez

Arreglos numéricos. Programación Clase 23

CLASE 1 INTRODUCCIÓN A MATLAB

Comenzando a usar MatLab:

Programación con Matlab

INTRODUCCIÓN a DERIVE 6. PANTALLA DE EXPRESIONES ALGEBRAICAS

Universidad de Concepción, Chile Departamento de Geofísica Programación Científica con Software libre

Como usar Excel para resolver una regresión lineal usando la función predefinida estimacion.lineal.

El intérprete de Python

Breve Tutorial sobre el Graficador GNUPlot

Python. Características Básicas

Un calculadora avanzada... y algo más!

GUIA BÁSICA DE KALGEBRA

Introducción a Matlab y Simulink

Laboratorio 1: Introducción a MatLab

Lección 1. Tutorial básico de MATLAB: Operaciones y funciones básicas

Introducción a MATLAB

TAREA 7. Problema 1. Supongamos que hicimos la siguiente asignación: x = [1, 2, [3, 'John', 4], 'Hi']

Tuxpaint. Descripción. Uso. Actividades. Contenido. 1 Descripción 2 Uso 3 Actividades

INSTITUTO INTERNACIONAL BRITANIA LIGTHART NIVEL: SECUNDARIA GRUPO: 3 A, B CICLO ESCOLAR PROFESOR: LUIS HERNANDEZ RAMOS

Universidad de Oviedo Grado en Física. Introducción a la Física Computacional

UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO. la Facultad de Ingeniería

Programación con Matlab

SESIÓN 9 OTRAS POSIBILIDADES DE WORD.

Prácticas de SAGE (caldum) 19 de Enero de 2012

UNIVERSIDAD DE INGENIERÍAS Y CIENCIAS DEL NORESTE CURSO INTENSIVO DE EXCEL

Introducción al la programación en python: algunas ideas básicas

GNUPLOT tiene dos modos de ejecución: batch e interactivo. El modo batch se accede ejecutando:

LA HOJA DE CÁLCULO DE OPENOFFICE

Matplotlib. Parte II

Vemos, pues, que esta forma de organizar los datos es mucho más potente que utilizando las tabulaciones u otros métodos.

USAC, Fac. Ing., Aplic. 2N, Prof. J. Saquimux, Aux. C. Pérez (Borrador)

Microsoft Office EXCEL

Introducción a Matlab

Manejo de la hoja de cálculo Calc. 1. Cómo abrir y guardar un archivo de Calc?

TALLER Nº 4 NOMBRE: CARLA HERNANDEZ NIVEL: CUARTO NIVEL

OPENOFFICE CALC. Manejo básico de hojas de cálculo

PRACTICA 1 CTE I 2015

LA HOJA DE CÁLCULO HOJA DE CÁLCULO:

Una introducción breve a la visualización de funciones en Matlab y Octave.

Aumentando ganancias restringidas por desigualdades (programación lineal)

Introducción a Python. Cecilia Manzino

Generalidades sobre Excel

PRÁCTICA 1: Introducción a Matlab

Microsoft Excel Tabla dinámica

TUTORIAL SOBRE HOJAS DE CALCULO

Módulo A. PROCESADOR DE TEXTOS. WORD Unidad 0. Introducción...15

Apunte de Tablas. Tablas.

Vemos, pues, que esta forma de organizar los datos es mucho más potente que utilizando las tabulaciones u otros métodos.

INTRODUCCIÓN AL USO DE PAQUETES COMPUTACIONALES

QUANTUM COMPUTACION CURSO DE PLANILLA ELECTRONICA MICROSOFT EXCEL 2013

Ecuaciones Diferenciales Ordinarias I

Transcripción:

Capítulo 5 Programación científica en Python Hasta ahora hemos visto las bases para crear programas sencillos en Python. Para poder crear programas un poco más poderosos es conveniente saber usar algunas herramientas más fuertes como la librería numérica de Python, numpy, junto con algunos consejos que pueden resultar útiles a la hora de hacer un programa más elaborado. 5.1. Numpy Acrónimo de Python numérico en inglés, esta librería provee una de las herramientas más útiles en el cómputo científico: los arreglos n-dimensionales. Para definir un arreglo de este tipo se utiliza array: >>a=array([1.2,2.2,4.5]) Cabe destacar que se utilizan tanto los paréntesis como los paréntesis cuadrados, en ese orden, al momento de definir un arreglo entrada por entrada. Si en cambio se requiere de un arreglo de números consecutivos se puede utilizar arange: >>> b=arange(0.1,1,0.1) >>> print b [ 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9] >>> los argumentos de arange son (origen, final, tamaño del paso). En caso de que no se especifíque el tamaño del paso, éste será por default 1. Si no se específica el origen, éste será por default 0. También se pueden definir arreglos con puros ceros o unos: 57

58 CAPÍTULO 5. PROGRAMACIÓN CIENTÍFICA EN PYTHON >>> b=zeros(10).reshape(2,5) >>> b array([[ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.]]) >>> b=ones(10) >>> b array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) reshape(2,5) da la forma en dos filas y 5 columnas. Se pueden hacer muchas cosas con los arreglos. Tomando nuestro arreglo b del ejemplo anterior, b.ndim: nos dice el número de dimensiones del arreglo. b.size: nos dice el número de elementos que contiene el arreglo. b.shape: nos dice la forma del arreglo en número de filas y columnas. También puede cambiar la forma del arreglo usandob.shape=2,5 donde 2 y 5 son las filas y columnas respectivamente. b.transpose(): transpone el arreglo. Si era un arreglo de 2 filas y 5 columnas, pasa a ser de 5 filas y 2 columnas. b.ravel(): reordena el arreglo en una sola fila b.sum(): suma todos sus elemetos. Se pueden agregar argumentos a sum() para sumar los elementos de las columnas o de las filas usandoaxis=0 óaxis=1. b.min(): da el valor mínimo de los elementos. También se pueden usar como argumentos los ejes. b.max(): lo mismo que el anterior sólo que ahora es el máximo. Una de las grandes ventajas de numpy es que permite un manejo sencillo de los arreglos. De esta manera, si dos arreglos son del mismo tamaño podemos sumarlos o restarlos. >>> a=ones(3) >>> a array([ 1., 1., 1.]) >>> b=ones(10) >>> b array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) >>> a+b Traceback (most recent call last): File "<stdin>", line 1, in <module>

5.2. MATPLOTLIB 59 ValueError: shape mismatch: objects cannot be broadcast to a single shape >>> a=ones(10) >>> a+b array([ 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.]) >>> a-b array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]) También se pueden añadir reales a todos los números del arreglo >>> a+sin(pi/2) array([ 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.]) Si los arreglos se usan como matricesdot(a,b) regresa el producto de las dos matrices con las mismas condiciones que se requieren para un producto de matrices. Otra de las partes más útiles de esta librería es la de álgebra lineal. Algunas de las funciones que se pueden realizar con ella son: linalg.inv(a) linalg.eig(a) La primera encuentra la inversa de la matriz A y la segunda nos devuelve los eigenvectores y eigenvalores de la matriz A en un arreglo. 5.2. Matplotlib Podríamos decir que con estas librerías tenemos cubierta buena parte del álgebra necesaria para solucionar muchos problemas físicos. Sin embargo todavía no podemos graficar todos los resultados obtenidos sin tener que usar alguna herramienta exterior. matplotlib es una de las mejores y más desarrolladas herramientas para gráficas 2D que junto con numpy y scipy forman pylab, una alternativa para matlab. Para usar pylab de manera similar a matlab usamos la versión interactiva de python: ipython -pylab Una vez ahí podemos graficar cosas muy fácilmente por medio del comando plot() que toma como argumento la función que se quiere graficar t=arange(0.0, 2.0*pi, 0.1) plot (t) plot (t,t) plot(sin(t), cos(t))

60 CAPÍTULO 5. PROGRAMACIÓN CIENTÍFICA EN PYTHON Se pueden colocar nombres a los ejes usando xlabel( nombre ) y ylabel( nombre ). Tambien se puede colocar una malla de fondo como referencia usandogrid(true). Para colocar dos funciones en una misma gráfica usamos t = arange(0.0, 5.0, 0.05) s1 = sin(2*pi*t) s2 = s1*exp(-t) plot(t, s1, t, s2) Se puede agregar una leyenda con el comando legend(( sine wave, damped exponential )) Se pueden también hacer subgráficas (Figura 5.1): from pylab import * def f(t): return cos(2*pi*t) * exp(-t) t1 = arange(0.0, 5.0, 0.1) t2 = arange(0.0, 5.0, 0.02) subplot(211) l = plot(t1, f(t1), bo, t2, f(t2), k ) grid(true) title( 2 subplots ) ylabel( Damped ) subplot(212) plot(t2, cos(2*pi*t2), r> ) grid(true) xlabel( time (s) ) ylabel( Undamped ) show() Se pueden visualizar otras cosas como números aleatorios (Figura 5.2): from pylab import * clf() X = rand(20,20) im = imshow(x) pcolor(x) Es fácil cargar y guardar archivos usando pylab, simplemente se usa el comando load( filename ) para cargar ysave( filename,x) para guardar un arregloxenfilename.

5.2. MATPLOTLIB 61 Damped 1.0 0.8 0.6 0.4 0.2 0.0-0.2-0.4-0.6 2 subplots -0.8 0 1 2 3 4 5 1.0 Undamped 0.5 0.0-0.5-1.0 0 1 2 3 4 5 time (s) Figura 5.1: Ejemplo de subgráficas 0 5 10 15 20 0 5 10 15 20 Figura 5.2: Ejemplo de visualización de números aleatorios

62 CAPÍTULO 5. PROGRAMACIÓN CIENTÍFICA EN PYTHON

Capítulo 6 Gnuplot 6.1. Gnuplot Una alternativa a la librería gráfica de Python matplotlib es gnuplot. Gnuplot es una herramienta sencilla pero poderosa para dibujar funciones y archivos de datos en 2 y 3 dimensiones e imprimir los resultados en varios tipos de formatos gráficos. Es una herramienta de línea de comandos, no tiene interfaz gráfica 1. La versión actual es 4.2 y se encuentra en su página http://www.gnuplot.info. Existen muchos tutoriales al respecto y una página con muchos ejemplos de su uso es http://gnuplot.sourceforge.net/demo4.2. Existe también un newsgroup donde se puede solicitar ayuda en comp.graphics.apps.gnuplot. Además el programa tiene ayuda interna que se puede consultar con el comandohelp, como por ejemplohelpplot. 6.1.1. Gráficas 2D Para dibujar funciones en 2D basta usar el comandoplot seguido de la función que se quiere graficar, usando como variable ax, o el nombre del archivo en el cual están los datos entre comillas ( ) o una sola comilla ( ), plot sin(x) plot "datos.dat" Se pueden definir variables y funciones: a=3 plot sin(a*x) f(x)=sin(a*x) plot a=1, f(x) title sin(x), a=2, f(x) title sin 2x, a=3, f(x) t sin 3x 1 Para ello se puede utilizar xmgrace para gráficas en 2D 63

64 CAPÍTULO 6. GNUPLOT Para graficar varias funciones en una sola gráfica basta con separar las funciones por comas, como se muestra en el ejemplo. Se pueden tambien poner títulos con title seguido del nombre entre comillas. Muchas de las opciones en gnuplot se pueden abreviar y no se debe poner toda la palabra para que el programa lo interprete. En este caso podemos resumirtitle con sólo unat. Las funciones las evalúa en varios puntos. Para ver como lo hace podemos poner plot sin(x) with points plot sin(x) w p set samp 500 set xlabel Eje x set ylabel Eje y replot Podemos establecer el número de puntos consetsamp y editar los nombres de los ejes conset xlabel ysetylabel. Al editar algún cambio de formato en la gráfica no debemos escribir de nuevo el comandoplot con todas las funciones sino que basta con ponerreplot. Por default todas las gráficas se muestran en un interfaz gráfico, pero quizá requerimos las gráficas en un archivo para su posterior uso. Para ello debemos establecer la terminal donde se va a imprimir la gráfica y el nombre del archivo que se quiere crear, set term png set out grafica.png Para saber que formatos gráficos se pueden utilizar se puede consultar la ayuda interna de set term. Se puede regresar al terminal original usandosettermpop. También podemos usar la línea de comandos del bash desde gnuplot sin tener que abrir otra ventanta del terminal usando!. Así podemos visualizar las imágenes guardadas con!kghostview sin.eps!ps2pdf sin.eps!kpdf sin.pdf Dondekghostview es un programa para visualización de archivos postcript ykpdf para archivos pdf. 6.1.2. Gráficas con archivos de datos Cuando se grafica directamente desde un archivo se puede determinar que datos en específico del archivo se quieren utilizar. Para dibujar la primera y segunda columna se usa indistintamente,

6.1. GNUPLOT 65 plot in.dat using 1:2 plot in.dat u 1:2 Se pueden combinar los valores de diferentes columnas usando $. De esta manera si queremos graficar la columna 1 con la suma de las columnas 2 y 3 escribimos, plot in.dat u 1:($2+$3) Recordando el uso de los paréntesis. Podemos dibujar algunos datos con el comandoevery, plot in.dat every 10 Se pueden usar barras de errores con plot in.dat w errorbars Se pueden escoger distintos tipos de líneas y puntos usando plot "in.dat" w lp lt 3 lw 3 pt 5 ps 1.5 Dondelt es el tipo de línea,pt el tipo de punto,lw el ancho de línea yps el tamaño de los puntos. Otros estilos de representación se pueden consultar conhelpplotstyle. También se pueden especificar los rangos usando: set xrange [3:10] set xange auto set yrange [4:10] 6.1.3. Scripts Si se van a hacer muchas gráficas con un mismo formato se pueden utilizar scripts de manera que no se tenga que volver a escribir todo el formato de la gráfica cada que se quiere graficar. Para ello sólo se tiene que crear un archivo con la terminación.gp. Los comandos se escriben uno por renglón para que los pueda interpretar gnuplot. Por ejemplo, si tenemos el archivo sin.gp que contiene una línea que diceplotsin(x), basta con escribir en una terminalgnuplot-persist sin.gp para que se muestre la gráfica en pantalla. El-persist es para que se mantenga la imagen por tiempo indefinido y no sólo se muestre y desaparezca.

66 CAPÍTULO 6. GNUPLOT 6.1.4. Gráficas 3D Para graficar en 3D usamos el comandosplot en lugar deplot. La segunda variable está dada poryde manera que podemos hacer gráficas como, splot sin(x)*cos(y) Se puede usar el ratón para rotar la figura y el botón de enmedio para expandir y contraer la imagen. Podemos tener una vista desde arriba consetviewmap. Para dibujar datos en 3 dimensiones con colores podemos usar splot "datos.dat" u 1:2:3:4 pal Donde la cuarta columna corresponde apal que es la paleta de colores. Se puede variar la paleta consetpalette. También se pueden hacer contornos con set contour surface set cntrparam levels auto 10 6.1.5. Proceso de datos Se puede dibujar nada más una parte de un archivo de datos usando un truco, si gnuplot ve NaN ( Not a Number ), entonces no dibuja nada. Entonces, se emplea el operador ternario: (a>0)? a : NaN que quiere decir: si a>0, entonces devolver el valor a; si no, devolver NaN. Por ejemplo, plot "in.dat" u ($1>0? $1 : NaN):2 dibujará los datos que tienen primera columna mayor que 0 nada más. Los datos en un archivo se pueden procesar antes de dibujarse asi: gnuplot "< awk {print $1, $2+$3} in.dat" En este ejemplo se puede hacer lo mismo directamente en gnuplot, pero puede ser muy útil. Por ejemplo, supongamos que hay dos archivos, 1.dat y 2.dat, que tienen la misma primera columna, y queremos dibujar la segunda columna del primer archivo contra la segunda columna del segundo archivo:

6.1. GNUPLOT 67 gnuplot "< join 1.dat 2.dat" u 2:3 6.1.6. Gnuplot y L A TEX gnuplot tiene la facilidad de mandar las etiquetas de las gráficas a L A TEX, set term epslatex blacktext color 9 dl 2 size 8.0cm, 5.5cm standalone Dondedl es dash length (longitud de las puntillas) ystandalone produce un archivo L A TEXcompilable. Sinstandalone produce un.tex que hay que usar con\include{test.tex}. Así se puede tener más control sobre el output. Para ir ajustando la salida, conviene guardar los comandos que generan la gráfica en un script. 6.1.7. Macros También se pueden hacer macros con set macros estilo = "every 5 u 1:10 w lp" plot "1.dat" @estilo, "2.dat" @estilo Donde@estilo se reemplaza con el texto definido.