{ "metadata": { "name": "", "signature": "sha256:caaca9ca2ed5dcc11392a293aea91f005a3d00c11a5afddf803f488eebd6696a" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Pr\u00e1cticas de la asignatura M\u00e9todo de los elementos finitos (D\u00eda 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alumno: Fracisco J. Navarro Brull" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Este notebook de IPython carece de explicaciones b\u00e1sicas para entender el funcionamiento del mismo. Para aprender m\u00e1s sobre SymPy (c\u00e1lculo simb\u00f3lico libre y gratuito basado en Python):
\n", "\n", "* http://nbviewer.ipython.org/urls/raw.github.com/franktoffel/UA-MIMAT/master/Introduccion-a-Sympy.ipynb\n", "* http://nbviewer.ipython.org/urls/raw.github.com/AeroPython/Curso_AeroPython/master/Notebooks/Clase5a_SymPy.ipynb" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from __future__ import division\n", "from sympy import *\n", "x, y, z, t = symbols('x y z t')\n", "k, m, n = symbols('k m n', integer=True)\n", "f, g, h = symbols('f g h', cls=Function)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "# El siguiente comando es opcional pero har\u00e1 que la soluci\u00f3n sea vea con LaTeX\n", "\n", "init_printing(use_unicode=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para esta sesi\u00f3n utilizaremos los bucles `for`. En Python, los bucles se escriben de la forma siguiente:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for j in range(0, 3):\n", " print j" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0\n", "1\n", "2\n" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como se observa, los intervalos del rango son cerrados al inicio y abiertos al final. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos anidar bucles:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for i in range(0,3):\n", " for j in range(0,3):\n", " print i+j" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0\n", "1\n", "2\n", "1\n", "2\n", "3\n", "2\n", "3\n", "4\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ejercicio, escribir desde i=1 hasta i=10 x=i+1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como recordotario, al trabajar con numpy estamos trabajando de forma simb\u00f3lica por lo que la siguiente expresi\u00f3n no se evalua." ] }, { "cell_type": "code", "collapsed": false, "input": [ "y+1" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$y + 1$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAC4AAAASBAMAAADWL/HSAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEImZdiLvVM27RDKr\nZt3KPpNmAAAAoElEQVQYGWNgwAYasQkyMER+RBFnDIBwJW1QxdkdoMpY8IgzKjswhAmAFaKoZ2JP\nYPCH6EcRD2duYJiJRVyAzYHhCxZxhvUC3L+B4kwdHX0ZHR0GICVg91gwsCSAOAwMKOYzzGHgPAAW\nRhO3ZFh/AZu4jIo91P8wc5iP/TsLUmkBUY4wB8TnaWD8BRXngpoH5vI5cDpAxVEoLhdrFD6UAwAn\nbSQjdVAHlgAAAABJRU5ErkJggg==\n", "prompt_number": 6, "text": [ "y + 1" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos combinar la potencia de SymPy con el lenguaje Python." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Creamos primeros un vector vac\u00edo de zeros" ] }, { "cell_type": "code", "collapsed": false, "input": [ "vector = zeros(1,3)\n", "vector" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{matrix}0 & 0 & 0\\end{matrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAFIAAAAZBAMAAABQnWQHAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAu90iEJmJdjLNVGbv\nq0S21SJoAAAA7UlEQVQ4EWMQUjJgIAz4lNQYFAgrA6uwJU2la3oEisFofJaw0gYGBrCZsxicUNyK\nxudcwKIMUcl9gIFtApKh6Pw9DAyZEJWMFxi4viCpROfLMjCsdwDbzn+Bge8Xkkp0/l8GhvcLwCr9\nAxj4viOpROOzfAWqLACrtE9g4PiGpBKNzwyU608gUaV/AprtqHwWoJlQ2/kDGLhQfITGB7pzPcRH\nTAIM3MihhM5XZGDYDwkl9gMMrMghj86vYWCIZAD7iEGLwacBye/ofKYFLCegKt3KbyArZEDjs6TX\nAg0iMdWhGIiLMxzNVCIyv+sCAJthSHs08ntvAAAAAElFTkSuQmCC\n", "prompt_number": 7, "text": [ "[0 0 0]" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Nota: Recuerda que en Python el indexado empieza desde 0
" ] }, { "cell_type": "code", "collapsed": false, "input": [ "for i in range(0,3):\n", " vector[i] = x+i+1" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "vector" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{matrix}x + 1 & x + 2 & x + 3\\end{matrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAMIAAAAZBAMAAACRNuzuAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAu90iEHarRIlmzVQy\n75klaIeGAAAB0UlEQVRIDe2WsUvDQBSHf23SVtvGFhcHRWOHIoJQEIqTBFzcLFjFTUGcdXFwURGF\nIkiLm5s6ZnBR5/oXiIMguFiXjlKwDtJCTXN3zZm7NEMpLgZ619x97315d5dSDKcy6N8VSU1B7196\nO3P27wxRw6e2+fcxH2KuMGoRXjUoEz4GdQPFna4KpYJySTQskCB1fNvLQImwAe1JblDJ0Qk1kNBF\nwz0LWvcyUELTEW4y+Hcfy9n3kRcsXfZgiNb9DJams0rqyubuCXkOjxpkBIJ1EmO3HEFrsIZvrI+9\n04s4z00T2sMgI3BwSGLsliOYIX5UsaZswzGKxi2hPQwyApMkhLQcwQzA2QM1GLhisIdBRgwlWVC7\n5wjHoD13dvrLhk9Nc8Y024sHuM+SSKzanNMQYsA0r19NswIoGQQazBBvQiWoRw0QiVgFs056cASt\nIVFH4Jsa7kI15LsaJMQjsMwZOIIatCSCn8QQaQRqSqmbQUIoU4Wq7hh4ghoGSyhb7177LKlb+bUL\nCrNVqr6lqbM9ISGirVZLp0Eugu30/seINeP+5WMGJ9b9zZ9gBhLpNuy5Ewr3/kSEq16sQUjY84C7\nhp4TCgn+DcKSSAaySPX5/1L6B5gGhE5HarwhAAAAAElFTkSuQmCC\n", "prompt_number": 21, "text": [ "[x + 1 x + 2 x + 3]" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Tambi\u00e9n podemos utilizar bucles anidados para completar matrices." ] }, { "cell_type": "code", "collapsed": false, "input": [ "matriz = Matrix(3, 3, zeros(1,9))\n", "matriz" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{matrix}0 & 0 & 0\\\\0 & 0 & 0\\\\0 & 0 & 0\\end{matrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAFgAAABLCAMAAADDCbAzAAAAPFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo1xBWAAAAE3RSTlMA\nMquZdlQQQOkwRInN3SJm77tsdo1uFAAAAedJREFUWAntmcGSgjAQRINE1hUV3fz/vy4JlZnpqYp9\nEDmFS8Z6xSM7Sax2CUMq1ynsdN03XwhDGuN6nXfyhiXbTimLh72c6lmseBrnOL55COGAQXxbuzHd\nH/pYVxEO2IqXZxbNN6eTj4QjtuJX2RfnNIkKC8IRW3Eq4mtqbQ/CERvxlMY8w2uKONH6iXCHjfiR\n5uwYtqHqdCTc4SPE0zbVN60of1GLu9vNjMPW43N78coaNDnebsX3V27o0txuhCO24lgOyNg8IIQj\ntuJwz0f62f6yIBwwiKd5/bprewPhgEGse/bzqoulh70VvRXSASmO2RWQOOTZWhAOGGYMiUN9UhEO\n2IoxcYhOCsIRWzEmDvFJQThiK8bEIT4pCEdsxC5xiK8WhDtsxC5xVJ+MhDt8hNglDplpLQh3OM/4\n5/JbbsbEUX06Eo7476K/QTBxqLBWhCM2PQ6YOKpOR8IRW3EPLAf8gNR1+ryCxftcp4Yull70Vhzc\nCkgc8mwtCAcMiweJQ31SEQ7YijFxiE4KwhFbMSYO8UlBOGIrxsQhPikIR2zELnGIrxaEO2zELnFU\nn4yEO3yE2CUOmWktCHfYzLj/h0UjVg8sPbBsB8oekHrEdhm/LP7SC5YpvxCJ8bpLC1ZJecESY/gH\nGckr4SSG0EcAAAAASUVORK5CYII=\n", "prompt_number": 22, "text": [ "\u23a10 0 0\u23a4\n", "\u23a2 \u23a5\n", "\u23a20 0 0\u23a5\n", "\u23a2 \u23a5\n", "\u23a30 0 0\u23a6" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "for i in range(0,3):\n", " for j in range(0,3):\n", " matriz[(i,j)] = i+j+1+1\n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "matriz" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{matrix}2 & 3 & 4\\\\3 & 4 & 5\\\\4 & 5 & 6\\end{matrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAFgAAABLCAMAAADDCbAzAAAAPFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo1xBWAAAAE3RSTlMA\nMquZdlQQQOkwRCK7ie/dzWZsTaT2EwAAAyJJREFUWAntmduanCAMgDOAdjuKSnn/dy1nEgNo59vu\nld4scvjNRsRfBl42HAK+6dgjD+BlpXLH9E1cMJ4mrAe/votZOQaDFynXdXCRRWu9jv+xl0xsDJ59\nlrV918vS0uIHTdbQWnq2r+kcg8XsK7eNdq1nyvpo7V5rWEltLfAWhohuxt+b+2dmezBcqVjM0QIf\n1ofcB4fxw1RoaILjhfeAL0GcC0e+O+cGd26WAfhtdWNIqnrpfcCdFQzA5bZ28HrrzkcfUTcVMie/\nw/WzJkwe3j75K/bAarRgLIunrWHSce4cUtgBTz6DcTwfCTbc1rXzhEzCH3YTLtPuwA8IxOdRhcAa\n4Dj5d9tr90OaD8iyu7VAiu6TZfzDPNkYUePCvsrme4QjPuI62gXDW7pVqruUOKxerRVxLcHgThCf\nVT/gkrcnFU8qSgZK4WdmxQ0hSStgCQwXDjW75rSW4IjvCAkMXl2bX8Ty2ofBN4QEqpHgWGP50KKu\n5Rh8LSSAjISDyWsNg0PXoZAAMpJ/BY+EhBhJA2yMklkOaMRjIQFiJBy8Oi9YsqxSsOs8EBKXCCQO\nHBxq1vRmY+C+kAA1kg5Yppe4B//6+h16jYUETkbCwCL4bRb3P1/1G2QsJHAyEgbeAlgmWcWpuCMk\n1UgYOHronrwcg+8ISTUSBg4rgtmSJ2HwtZBgI2FgWKQWMqsoAfO+n9c84JK7JxVPKkoGSuHnZkXZ\nIinXrgViJLW6lrRWOr30WMQDIQFiJBWXS/PhLEg2lk3fYSQkQIwk4+rfw78T1/Shd4p4KCRAjKQC\nU8mQT9YTeCgkF+CVbCZRMN4iYRG5XR1sJKzdHi+tsmzSj/QLIQFiJGew24XyH7tb2pcjEd8REshG\nwsHh/SzTPgkG3xISyEZyBqcNOZMcC4GvhASokTBw9AqT9kkQ+EpIgBoJA8dZ0Yg49ixbJGwgUCNh\n7VPKcWxAEceKskXCBjpvcHXFSHj76m7+3JwVZIuED6RG0mjXUoq2eDc6f1rFUvEp6DzuAZeM/OdU\nhJ288TJeQrkulB9YZv+DiFKjLcBrGuoRfmBRCv4Cy3spEQPmazQAAAAASUVORK5CYII=\n", "prompt_number": 24, "text": [ "\u23a12 3 4\u23a4\n", "\u23a2 \u23a5\n", "\u23a23 4 5\u23a5\n", "\u23a2 \u23a5\n", "\u23a34 5 6\u23a6" ] } ], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nota: Los +1 se a\u00f1adieron dado que estamos empezando por i=0 debido a que la indexaci\u00f3n de la matriz debe empezar por 0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las funciones en Python se definen de la siguiente forma " ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f_siguiente(N): \n", " \"\"\"Suma la unidad a n\"\"\"\n", " N = N+1\n", " return N" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "f_siguiente(10)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$11$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAABIAAAAPBAMAAAAbqIIhAAAAJFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAADHJj5lAAAAC3RSTlMAzRAiu5mrdu/dZmiL4QAAAAApSURBVAgd\nY2BgEGIAAhBhsglKqIQBWWCCgR0kRluCNWNnFgOYAFoFAQBGyhXd/alsfgAAAABJRU5ErkJggg==\n", "prompt_number": 26, "text": [ "11" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "f_siguiente(23)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$24$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAABMAAAAPBAMAAAD0aukfAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIpm7MhCriUTv3c12\nVGZoascqAAAAg0lEQVQIHWNgVDJ2YGBgYFFgYAhjYP8BZHIZMDCkMjDMBDJPApmzGBjyHRgYXwOZ\n+wNATHZuIBMI1gcwPIQwOb4zsB6AMIGa2RkgTGUGhisQJk8CA2sBhHmJgVE2LS1/2gGQjTwCDAyc\nQMOkyouygAbyA5n7////xcDAbv/tAcgKKAAALJIbA5WeN94AAAAASUVORK5CYII=\n", "prompt_number": 27, "text": [ "24" ] } ], "prompt_number": 27 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ejercicio: Definir una funcion suma que devuelva la suma de los naturales de 1 hasta n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f_suma(N):\n", " \"\"\"Sumatorio de 1 a n\"\"\"\n", " sumatorio = 0\n", " for i in range (0,N+1):\n", " sumatorio = sumatorio+i\n", " return sumatorio\n", " " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "f_suma(2)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$3$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAALVBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOrOgAAAADnRSTlMAIom7VJlmdt1E7xDNMpCR\nWcAAAABSSURBVAgdY2AQUjJhYGAMYPBLYGB/wsDXwMC5kmHfAQYgAIoAwVEg5tUIADEZtC6ASK7V\nDIwCDMxAxa8ZmJ8xcBkwcDxkYEtg8CtgYJgaaskAAFKHDvy4QzOnAAAAAElFTkSuQmCC\n", "prompt_number": 29, "text": [ "3" ] } ], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "f_suma(3)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$6$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOBAMAAADkjZCYAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAiXYyEM1EmbtmIu9U\n3auvYvmWAAAAVElEQVQIHWNgYBBUNGBgcE1gD2BgCGTgaGDg/MUABBwbQCR/sFAZA4N/JAP3AQb/\nLwzsWxj4LzBwfmPgDmDg/AlSA2TzAMWBihsZvA8wMDCWP2YAAHWLEd5O6O0DAAAAAElFTkSuQmCC\n", "prompt_number": 30, "text": [ "6" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "f_suma(100)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$5050$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAACcAAAAOBAMAAABeLhj4AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAzXYQMplE74mrIma7\n3VSKKnSYAAAApklEQVQYGVXMMQ4BQRSA4X8zEtnBHTaRjVDNEeYGaGQ7brCRqFRspxKFE4gzKBRq\nhUIrirnBVoRqjd3IjFd9+d/LI2jXRogk1jhRL4qIwIibJ4JVDw6w9ESInTPkyqmKb0hNGUsRHmMt\nHjZGTjSVfMoX9BdO34+XKv6J8c5eppGNP21gPbE/c+PE1O7VHU7KiQFc6cDQE3sac1pGzDwhk61C\nZF3t6QP7mUb9ZffHNgAAAABJRU5ErkJggg==\n", "prompt_number": 31, "text": [ "5050" ] } ], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para integrar por elementos finitios:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$integral = [ 1/{2} [f(a)+f(b)]+f(x(2))+f(x(3))+...] l$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Primero veamos como generamos la matriz de elementos que ir\u00e1 dentro de la funci\u00f3n:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "n_elem = 5\n", "matriz = Matrix(1, n_elem+1, zeros(1,n_elem+1))\n", "matriz[0] = y+1\n", "matriz[-1] = y+5\n", "for i in range(1,n_elem):\n", " matriz[i] = x+i\n", "matriz" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$\\left[\\begin{matrix}y + 1 & x + 1 & x + 2 & x + 3 & x + 4 & y + 5\\end{matrix}\\right]$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAAZBAMAAAA/CW8DAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAu90iEImZdu9UzUQy\nq2ZL2gGsAAADmUlEQVRYCe2YTWgTQRiG32R389s0VUQRLY0FqQhCRCyKoCtSeioNYq0I2hREobQY\nsH+X0h4EQZEWFPQgNIo/sKfiwd5sT70aEKkIbYMeFA9SbKCUqnGyM7OZWffHi9AW97DZne+Z7/3e\n+WY3IdjemMZmP142ZpDa7CYq9SuFre7jqW+bYroP0ty914c42rHbhwBqst7IC31uyr0fh0ves0kr\nG3RvRC2ga8oTUbKYLHoSJBis8ybGy6t/7iuVPfOn+1x9nKFp1Z1LuosAIxI6ImPOCJMJryGZ8iRI\ncNjFB1PBs3lSs/35iOZY2rCrjwdceFTnV7ZPRkRSSPywhdgtk4nfQXvekyAVfnXxwesoVBL8Sx+x\nkp8PUoDbvrIWVIv9vY+Wa1BumutiTbf1o3XkxABrFV8HyP1Qh95Od5o5YBEIil0VCEsGz+kUenYi\nPkk+1PM5HNNNmqssfu7l/cg8RHjZDFoCsg81U9sUzJtEtUrZRws+5g7aCMxk6Ih5FgguU3M2KwBw\nINSc5EOLjmGUTuE+duAUe18pEz0I0O5xAcg+NF0rRdPyfFs/zqFLv2cjsE+sUiAsGVyYFRAHQoPk\n43goj212lUCKPh8qbiGZM6OWgOxDFbLxdbD50PGYV2QRIbo4bFwgLBlE6H6miAPxSFAmkB7JYZXC\nlgpCK+w5j5fwZhbQDOPJbcPIVjjZB7jPi4ZxwDDoppb3FVh+kRipZBIOWkFVRkkjsCbEeY4qoWZk\nH5jRayrvwKpKIg9tnfkgzRqm6ayFsvsgPnWKWOtg80HyqzIRzeIIHaHnKsFkkiUEfnkS0YWFpbt0\nq1CuB+ExesXqiOQRKjEfgQLqadDFR1QfRViX5sO2r+6TN0W/TMwBN+iIeRYIJhOpQ3DFkyBBAglH\nPUix5sF8hMg3fp73oy7OlsXFx8xEA06ybM79iK8FlpWipKDs7+hLsUnkQySYTG0Rk8JiOxBkXlLy\n0Y2ZIs3J6lCy+JJmPtR3g2xZuI/Q+++LFDfPbUOtl4vsnvvoGz/Eh0hEne8f+CYTsXK5nGJDNoLL\nvLq6pwpIOTgBreFnUWDaOq+n6S2vo/nSFf79AZAnxDys6fTW6cznO8XomD/hL+NO9DBhSYX+LvmA\n9ikajRcZ5f7x2j3EIv6Ev4wLkcir604q1EcTdvkWtzGAYC4gPFDVmqiP6cHZ6tCGvooP9TrWZ/+9\n6whtgsH/PjZWk0g/GrfE/1eF33qAEowmLFtxAAAAAElFTkSuQmCC\n", "prompt_number": 42, "text": [ "[y + 1 x + 1 x + 2 x + 3 x + 4 y + 5]" ] } ], "prompt_number": 42 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Teniendo esto claro, podemos crear la funci\u00f3n directamente" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f_elem(f,a,b,n_elem):\n", " \"\"\"Donde f es la funci\u00f3n (simb\u00f3lica)\n", " a,b: intervalo\n", " n: el n\u00famero de elementos\"\"\"\n", " \n", " # Calculamos la longitud del intervalo\n", " l = (b-a)/n_elem\n", " \n", " # Creamos primero el array vac\u00edo\n", " matriz = Matrix(1, n_elem+1, zeros(1,n_elem+1))\n", " \n", " # Establecemos los valores en los extremos\n", " # Nota: en Python el \u00faltimo elemento se indica\n", " # con el \u00edndice '-1'\n", " matriz[0] = a\n", " matriz[-1] = b\n", " \n", " for i in range(1,n_elem):\n", " matriz[i] = a+i*l\n", " \n", " integral = 0\n", " \n", " # Para depurar c\u00f3digo activar siguiente l\u00ednea\n", " # import pdb; pdb.set_trace()\n", " \n", " # Sumamos los valores de f(x) intermedios\n", " for j in range(1,n_elem):\n", " integral = integral + f.subs(x, matriz[j])\n", "\n", " # Sumamos los valores de inicio y fin\n", " integral = integral + (1/2)*(f.subs(x, matriz[0])+f.subs(x, matriz[-1]))\n", " \n", " integral = integral*l\n", " return integral.evalf()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "f_elem(sin(x),0,1,2)" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$0.450080515504076$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAAPBAMAAACGiUnsAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJdjLNVN0iZu+7\nq0QgoRR7AAACp0lEQVQ4EbWTP2hTURTGf++9JmlekjZoUaFDoqFu1kCLg1iMVgQpYujgJqZUEcQh\nDo7STorQQujo0iAiaIemg4pQ6VMXHaRBqkMhNIN7qYqlf5/nnptSB1fvcLj5vi8/7j33PDjQ34Nd\nw3AjPdy0ispdg73g5M4XiZ6LyJZoupXRoDoQydpMZDLX1wd9g0W4xZGKpU7AQvirpaicJVUmWnYe\nkQjDAsQXhaoZLepAe2AzfhiGOxxquiX8Gl4Js9rmYXSpYhWVY1XiJWbgFNGBS3Lq9ytCNRlb1IGh\nwGZc0euMkgxI1omtKfXxHSNiFZW9AGeczzCWTmmEK0I1GVvUIf4ssBkPvKK/YezOOh3rZkO+RVVF\nS8d22quyA6vlf1LVwYsGNiOM7yRrhpXJ0iG9BL8i1OWnPVax8srmaZwfQi2kXsiToWc1GQ1ah+fR\noLWDgM6b/fKs03kiPw21C6G+Y7qpipXdcIS4uNfzyXR8t0U1GQ1axylEA7uTBlTJ3CZR3qfmDVW6\nOv4X9cnVrebeP/jYopqMBq3jsU/NyN3XcOfI5G0HYkVLdTdU0eLXmZ1z5KyrBcGcrNgOgGtexN2w\nzj2h7mUuyjuN4+/SmSVmXusgQk2V8HZV0ZJIE1lH+jpW/gZnm0rVjBZ17uaFajMwAQkZ1k0zwr6Z\nrPuNxtaSSO6aKlrkQiyb6Gz6lZw1rVTNaFHncKOx8ragGRwZCpkBOWtbDfkWdM3jyodSUkVLQu78\niSE4ThYeSEjmVTNarCPHC1q7iFxLht+twUO6i85vg90mnmWmooqWjhH8Au1l5yVT+G8sVTM2qI60\nMrAZYkLlA91laeiFrzApP8+Ey0wNHG0pKl/L9cp32n+5SDz3RRpwYmGyajMaVAdvcadqd/HXgvGO\nCe+/rD84GhJ5mfS9NwAAAABJRU5ErkJggg==\n", "prompt_number": 49, "text": [ "0.450080515504076" ] } ], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "f_elem(sin(x),0,1,10)\n" ], "language": "python", "metadata": {}, "outputs": [ { "latex": [ "$$0.459314548857976$$" ], "metadata": {}, "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAAPBAMAAACGiUnsAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEJmJdjLNVN0iZu+7\nq0QgoRR7AAADEklEQVQ4EbWTzYsUVxTFf9XVXT1V/VUYkcAsunVwEYhOk1YIfjDtR4TgwsaAuAn2\nqCEgSgbEpcysko0DhdnFhY1IQF3Ys0kwjLHUhbqJjaiLSYZpxD/A1sHBccb2vFet+Qt8dJ9677zz\nzrt17y1Ys2UjyTgIx8ODXTFfwK+1e2K90GxlKni7MpvNVJq1ezSzYMnDj2q1qjOyOyIzPVKrQW1P\nA37k88jo4Rzc6i/i/MWFyK8w2cJ/aF2HYnL9fn2gqVCYwIIlr/f7/c5wy79BoNkq67qpJkEbt2n0\npGfh2OOIQptCnF6iNOXcWbCu+2O8nd8ONFld1rSQkHqvAv/Cf6QUXYdj5GPyHbI96/rbSUNCqYnb\nK/5NuQkHjKv/e6yDdkjjxjhTFhKyClt5DWOhC24jeGOEpQ7FJXuiOnAtx6TfiVEGElfX++gqTXEl\ndFsWPlxVrDsrknZ15jn5th6UKxQXzSSI5Dp3eSM5xbos4qj+NtYrnlyv7m4MNAvL28BCQpKHPxRr\nS/qY0g9bVMyLVTKvtGYtcr3Nxa77Am+RzNcVkcbVqXtKVOgrfqtJ9cfBQkKiS8bgp7oS0KJ8gtzE\n/65V4wr5KY5z2sS6XcEZVxcv1pL7YDWXDr3tYiEhnRfqwHrWxFrWr0dqhnI1yUC2kbim3hDs/c5k\nOjeTuJ7Bi7VkNLKaoMP1GQsJSbqpyeVvxiZgn+o0RfCOUoWs8fgMuRaUUlOoQs+PyItWrE4VL+ap\n3rJrNbmQzJKFhETdbIZpwnOKRc26bLjAdNbZ+fm3j0WlzMLrlHrklQa5ZufnF27WVY7R0Gr0lsxZ\nMDUaDSl3xMApVWBVGWybWNNt9C3YMUsKhprBDY5EuZghdZ7Jq+6P9S3xs5nOkovggYUBeUR716KM\n1JmXmOZPteEXhhvOa3NiBb+i/fS4c4KgxWT9g2sp5jy6zGqK4wR1CwNysqKEhutacpQrdxmeUEL3\nPoFpLXf05zi/cz189WUXnm34BzbdmpbYfbja8kcembCN5vuRzSSQkBdk4ho1/p8Cd4P8Psl4Dx+/\nAHE2c4k3AAAAAElFTkSuQmCC\n", "prompt_number": 44, "text": [ "0.459314548857976" ] } ], "prompt_number": 44 } ], "metadata": {} } ] }