{ "metadata": { "name": "", "signature": "sha256:16c6ca33234648dcaa813d24803cbfd46e15d1816d9446e9038bfc859e038b4e" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Estructura y notas del programa" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Este documento interactivo es la primera versi\u00f3n sobre la estructura de un programa en `Python`. La idea con el documento es presentar los elementos b\u00e1sicos para la construcci\u00f3n de m\u00f3dulos y funciones. En esta primera parte se presenta el formato de programaci\u00f3n utilizado para el desarrollo de las bibliotecas. Como referencia se utiliza el programa `bisection.py`.\n", "\n", "Como primer elemento, se encuentra el encabezado del programa, este incluye informaci\u00f3n sobre el autor, versi\u00f3n del programa y descripci\u00f3n del mismo. Para este proposito es posible utilizar el formato de bloque de comentarios o el tipo `docstring`. El primero puede presentarse como:\n", "\n", "\n", " #==================================================================\n", " #file : bisection.py\n", " #description : This is a function that calculates the roots of \n", " # a polinomial function using the bisection \n", " # numerical method.\n", " #inputs: : rf ; raw function, string of the form a*x+b\n", " # a ; left range interval\n", " # b ; right range interval\n", " # n ; number of iterations\n", " # t ; tolerance of calculation\n", " #output: : x ; the aproximated value of x such that f(x)=0\n", " #version : 1.01\n", " #usage : python bisection.py\n", " #dependencies : none\n", " #python_version : 3.3.4\n", " #author : JJ.Cadavid - SFTC - EAFIT University\n", " #date : 24/08/2014.\n", " #===================================================================" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El bloque de comentarios, utiliza el indicativo `#` de comentario al inicio de cada l\u00ednea, donde cada una establece un elemento de la informaci\u00f3n del programa. El formato `docstring` puede establecerse l\u00ednea por l\u00ednea o de manera multil\u00ednea.\n", "\n", " \"\"\"\n", " file: bisection.py\n", " description: This is a function that calculates the roots of a \n", " polinomial function using the bisection numerical method.\n", " inputs: : rf ; raw function, string of the form a*x+b\n", " a ; left range interval\n", " b ; right range interval\n", " n ; number of iterations\n", " t ; tolerance of calculation\n", " output: : x ; the aproximated value of x such that f(x)=0\n", " version: 1.01\n", " usage: python bisection.py\n", " dependencies: none\n", " python_version: 3.3.4\n", " author: JJ.Cadavid - SFTC - EAFIT University\n", " date: 24/08/2014.\n", " \"\"\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Este formato utiliza las tres comillas dobles para abrir y cerrar el entorno. Usualmente este formato es utilizado para establecer la documentaci\u00f3n de la clase o funci\u00f3n. Otro posible formato es creando variables de string:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "__file__ = \"bisection.py\"\n", "__description__ = \"This is a function that calculates the roots of a polinomial function using the bisection numerical method\"\n", "__version__ = \"1.01\"\n", "__usage__ = \"bisection(rf,a,b,n,t)\"\n", "__dependencies__ = \"none\"\n", "__python_version__ = \"3.3.4\"\n", "__author__ = \"JJ.Cadavid - SFTC - EAFIT University\"\n", "__date__ = \"24/08/2014\"" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "La segunda secci\u00f3n est\u00e1 en el llamado de modulos v\u00eda la funci\u00f3n \"import\". \u00c9ste primer llamado carga todas las funciones y m\u00e9todos que est\u00e1n predeterminados en el m\u00f3dulo. Para cargar un m\u00f3dulo part\u00edcular se utiliza la secuencia de llamado \"from module import function\":" ] }, { "cell_type": "code", "collapsed": false, "input": [ "#required modules\n", "%matplotlib inline\n", "import parser\n", "import matplotlib\n", "from sys import exit as error" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "La l\u00ednea `%matplotlib inline` permite integrar los gr\u00e1ficos generados directamente en el `notebook` en lugar de visualizarlos en ventanas emergentes. En el caso de tener una funci\u00f3n como `exit`, se puede agregar una secuencia de llamado diferente agregando `as` que permite renombrar el nombre de llamado en el programa. La tercera parte elemental de la estructura es la funci\u00f3n principal o el conjunto de m\u00e9todos dentro de una clase. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "\n", "def bisection(rf,a,b,n,t):\n", " \"\"\"Numerical method that finds roots of first grade polynomials\"\"\"\n", " f=parser.expr(rf).compile() #Parse string function into operable code by replacing x string with a number\n", " x=a;\n", " fa=eval(f); #f(a) interval eval\n", " x=b;\n", " fb=eval(f); #f(b) interval eval\n", " if ((fa*fb)>0): #Both images must cross the x-axis, a way to check is with sign\n", " sys.exit('[a,b] Interval does not cross the x-axis');\n", " fp=10;\n", " i=0;\n", " while (abs(fp)>t):\n", " x=a+(b-a)/2; #Aproximation Calculation - changes every iteration\n", " fp=eval(f);\n", " print(\"f(p)={}\".format(fp));\n", " if(fa*fp)>0:\n", " a=x;\n", " else:\n", " b=x;\n", " if(i>n):\n", " print(\"p={}\".format(x));\n", " error('Tolerance not met by set iterations');\n", " i=i+1\n", " print(\"p={}\".format(x));\n", " return(x);" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hasta el momento, se ha definido un m\u00e9todo con cinco par\u00e1metros, \u00e9stos deber\u00e1n ser introducidos por el usuario. Un segundo programa nos permitir\u00e1 una secuencia de llamado del m\u00e9todo y los par\u00e1metros necesarios:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "function = \"6.1*x + 23.64\";\n", "a = -5.0;\n", "b = 0.0;\n", "n = 10.0;\n", "t = 0.05;\n", "root = bisection(function, a, b, n, t);\n", "print(root);" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "f(p)=8.39\n", "f(p)=0.7650000000000006\n", "f(p)=-3.0474999999999994\n", "f(p)=-1.1412499999999994\n", "f(p)=-0.18812499999999943\n", "f(p)=0.28843750000000057\n", "f(p)=0.05015625000000057\n", "f(p)=-0.06898437499999943\n", "f(p)=-0.009414062499999432\n", "p=-3.876953125\n", "-3.876953125\n" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una de las recomendaciones durante la asignaci\u00f3n de valores en un programa, est\u00e1 en asignar todas las variables antes de la ejecuci\u00f3n del m\u00e9todo, incluso las variables que no son necesarias en la funci\u00f3n. El motivo de ello est\u00e1 en que los objetos en memoria son localizados en un bloque de registros cercanos, agilizando el computo y evitando reservas de memoria en otros bloques." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para visualizar el resultado del m\u00e9todo de bisecci\u00f3n, se puede importar el m\u00f3dulo de \"matplotlib\", una librer\u00eda especializada en la visualizaci\u00f3n y representaci\u00f3n de datos. En \u00e9ste caso, la funci\u00f3n \"pyplot\" permite la representaci\u00f3n bidimensional de datos" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "from numpy import linspace" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "function=lambda x:6.1*x+23.64; # Function of obtained root\n", "x = linspace(a, b, 100); # x domain values defined by [a,b] interval\n", "y=function(x); \n", "font = {'family' : 'serif','color' : 'darkred', 'weight' : 'normal', 'size' : 16} # font used in axes legend\n", "plt.plot(x,y);\n", "plt.axis('auto') # according to list data, axes are adjust in the plot\n", "plt.title('First order polynomial root', fontdict=font); \n", "plt.text(-3, 12, r'$6.1x+23.64$', fontdict=font);\n", "plt.text(root, 0, r'$\\circ$ Root', fontdict=font);\n", "plt.xlabel('x position [a.u]', fontdict=font);\n", "plt.ylabel('y position [a.u]', fontdict=font);\n", "plt.grid();\n", "plt.show();" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nmIT8P+7o1tlsKSw6AAAAAElFTkSuQmCC\n", "text": [ "<matplotlib.figure.Figure at 0x5a31978>" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "En la primera l\u00ednea de la anterior secci\u00f3n, se ha utilizado la funci\u00f3n \"lambda\", \u00e9ste m\u00e9todo permite manejar objetos que permitir\u00e1 evaluar una funci\u00f3n. \u00c9ste es sumamente \u00fatil para el caso de definir una funci\u00f3n algebr\u00e1ica que se desea evaluar. De manera similar en la definici\u00f3n de \"bisecci\u00f3n\" se utiliz\u00f3 un an\u00e1logo, \"parser.expr().compile()\". A diferencia de \"lambda\", \"parser\" permite el manejo part\u00edcular de objetos tipo string, mientras que \u00e9ste \u00faltimo permite el manejo de obtjetos mat\u00e9maticos. Una comparaci\u00f3n para evaluar expresiones algebra\u00edcas ser\u00eda:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = 0.64; # Asumiendo que la variable de la expresi\u00f3n es x.\n", "\n", "function_1 = ('1.2*x**3-0.6-x*2+0.85*x-78.9'); # Entrada de funci\u00f3n polin\u00f3mica tipo string\n", "function_1P = parser.expr(function_1).compile();\n", "print(\"Parser evaluated -> {}\".format(eval(function_1P)));\n", "\n", "function_2 = lambda x: 1.2*x**3-0.6-x*2+0.85*x-78.9; # Entrada de funci\u00f3n polin\u00f3mica como objeto matem\u00e1tico\n", "function_2P= function_2(x);\n", "print(\"Lambda evaluated -> {}\".format(function_2P));" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Parser evaluated -> -79.92142720000001\n", "Lambda evaluated -> -79.92142720000001\n" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ambos resultados son id\u00e9nticos, la diferencia est\u00e1 en el tipo de entrada. Para trabajar con strings, suponiendo que el usuario ha ingresado un valor desde \"input\", \"parser\" es m\u00e1s adecuado para largas cadenas de car\u00e1cteres ya que trabaja en parte en bajo nivel, mientras que \"lambda\" permite evaluar funciones definidas como objeto matem\u00e1tico utilizando el interprete." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Otro de los elementos para mencionar es la diferencia entre \"list\" y \"range\". En python 3.0, hay una diferencia respecto al python 2.0 con \u00e9stos m\u00e9todos. Para reducir el tiempo, \"range\" se ha definido como un objeto de memoria que define la posici\u00f3n, ello implica que no es un objeto que se pueda llamar y visualizar. Principalmente puede ser utilizado como iterador. El otro m\u00e9todo \"list\" permite manejar objetos representables que tienen un elemento asociado que se puede visualizar." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una funci\u00f3n recurrente en la programaci\u00f3n de los m\u00e9todos num\u00e9ricos es \"linspace\", que permite generar un listado de elementos num\u00e9ricamente equidistantes en un intervalo. Por defecto, se utilizan 50 elementos y se puede variar \u00e9ste par\u00e1metro. Un m\u00e9todo similar es \"arange\" que permite generar un listado de elementos un intervalo. Ambos m\u00e9todos son importados desde \"numpy\"." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from numpy import arange\n", "AR=arange(0.0,11.0,1);\n", "print(AR);\n", "LN=linspace(0.0,10.0,11);\n", "print(LN);\n", "plt.plot(AR,LN,'ro')\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]\n", "[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "<matplotlib.figure.Figure at 0x7f9dc88>" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ambos m\u00e9todos son equivalentes, pero n\u00f3tese que para un intervalo desde [0,10] \"arange\" requiere sumarle uno al extremo final, ventaja de arange es que permite ajustar la distancia en que los objetos creados son equidistante. Por su parte \"linspace\" permite ajustar el total de elementos a utilizar, siendo de utilidad para discriminar un dominio discreto, particularmente \u00fatil en el caso de que se desee muestrear una funci\u00f3n, evaluando cu\u00e1ndo el dominio est\u00e1 submuestreado o sobremuestreado." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Cambiar el formato del documento\n", "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open('../styles/custom_ketch.css', 'r').read()\n", " return HTML(styles)\n", "css_styling()\n", "\n" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "<link href='http://fonts.googleapis.com/css?family=Alegreya+Sans:100,300,400,500,700,800,900,100italic,300italic,400italic,500italic,700italic,800italic,900italic' rel='stylesheet' type='text/css'>\n", "<link href='http://fonts.googleapis.com/css?family=Arvo:400,700,400italic' rel='stylesheet' type='text/css'>\n", "<link href='http://fonts.googleapis.com/css?family=PT+Mono' rel='stylesheet' type='text/css'>\n", "<link href='http://fonts.googleapis.com/css?family=Philosopher:400,700,400italic,700italic' rel='stylesheet' type='text/css'>\n", "\n", "<style>\n", "/*Based on David Ketcheson template: https://github.com/ketch/HyperPython/blob/master/custom.css*/\n", "\n", "#notebook_panel { /* main background */\n", " background: #888;\n", " color: #f6f6f6;\n", "}\n", "\n", "div.cell { /* set cell width to about 80 chars */\n", " width: 1000px;\n", "}\n", "\n", "div #notebook { /* centre the content */\n", " background: #fff; /* white background for content */\n", " width: 1200px;\n", " margin: auto;\n", " padding-left: 1em;\n", "}\n", "\n", "#notebook li { /* More space between bullet points */\n", "margin-top:0.8em;\n", "}\n", "\n", "/* draw border around running cells */\n", "div.cell.border-box-sizing.code_cell.running { \n", " border: 3px solid #111;\n", "}\n", "\n", "/* Put a solid color box around each cell and its output, visually linking them together */\n", "div.cell.code_cell {\n", " background-color: rgba(171,165,131,1.0); \n", " border-radius: 10px; /* rounded borders */\n", " padding: 1em;\n", " margin-top: 1em;\n", "}\n", "\n", "div.text_cell_render{\n", " font-family: 'Arvo' sans-serif;\n", " line-height: 130%;\n", " font-size: 115%;\n", " width:700px;\n", " margin-left:auto;\n", " margin-right:auto;\n", "}\n", "\n", "\n", "/* Formatting for header cells */\n", ".text_cell_render h1 {\n", " font-family: 'Philosopher', sans-serif;\n", " font-weight: 400;\n", " font-size: 40pt;\n", " line-height: 100%;\n", " color: rgb(12,85,97);\n", " margin-bottom: 0.1em;\n", " margin-top: 0.1em;\n", " display: block;\n", "}\t\n", ".text_cell_render h2 {\n", " font-family: 'Philosopher', serif;\n", " font-weight: 700;\n", " font-size: 24pt;\n", " line-height: 100%;\n", " color: rgb(171,165,131);\n", " margin-bottom: 0.1em;\n", " margin-top: 0.1em;\n", " display: block;\n", "}\t\n", "\n", ".text_cell_render h3 {\n", " font-family: 'Philosopher', serif;\n", " margin-top:12px;\n", " margin-bottom: 3px;\n", " font-style: italic;\n", " color: rgb(95,92,72);\n", "}\n", "\n", ".text_cell_render h4 {\n", " font-family: 'Philosopher', serif;\n", "}\n", "\n", ".text_cell_render h5 {\n", " font-family: 'Alegreya Sans', sans-serif;\n", " font-weight: 300;\n", " font-size: 16pt;\n", " color: grey;\n", " font-style: italic;\n", " margin-bottom: .1em;\n", " margin-top: 0.1em;\n", " display: block;\n", "}\n", "\n", ".text_cell_render h6 {\n", " font-family: 'PT Mono', sans-serif;\n", " font-weight: 300;\n", " font-size: 10pt;\n", " color: grey;\n", " margin-bottom: 1px;\n", " margin-top: 1px;\n", "}\n", "\n", ".CodeMirror{\n", " font-family: \"PT Mono\";\n", " font-size: 100%;\n", "}\n", "\n", "</style>\n", "\n" ], "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "<IPython.core.display.HTML at 0x7f9a400>" ] } ], "prompt_number": 19 } ], "metadata": {} } ] }