{"id":12045,"date":"2017-08-07T16:01:47","date_gmt":"2017-08-07T21:01:47","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/analisisnumerico\/?p=12045"},"modified":"2026-07-16T13:54:49","modified_gmt":"2026-07-16T18:54:49","slug":"integraldobles-arearectangular","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u05\/integraldobles-arearectangular\/","title":{"rendered":"5.6 Integrales dobles sobre \u00e1rea rectangular con Python"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p>Integral <a href=\"#concepto\">doble<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxy\">algoritmo f(x,y)<\/a><\/p>\n\n\n\n<p>gr\u00e1fica:<\/p>\n\n\n\n<p><a href=\"#graficamalla\">malla<\/a><\/p>\n\n\n\n<p><a href=\"#graficabarras\">barras<\/a><a name=\"concepto\"><\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxiyj\" data-type=\"internal\" data-id=\"#algoritmofxiyj\">algoritmo f(x<sub>i<\/sub>,y<sub>j<\/sub>)<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"concepto\">1. Integrales Dobles sobre \u00e1rea rectangular<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>: Chapra 21.5 p643, Burden 4.9 p174<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/08\/integramultiple_wireframe_bar01.png\" alt=\"integral multiple wireframe barras 01\" class=\"wp-image-13659\" \/><\/figure>\n\n\n\n<p>Un ejemplo sencillo de integral doble es una funci\u00f3n sobre un \u00e1rea rectangular. Las t\u00e9cnicas revisadas en las secciones anteriores de pueden reutilizar para la aproximaci\u00f3n de integrales m\u00faltiples. <\/p>\n\n\n\n<p>Considere la integral doble<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\int_R \\int f(x,y) \\delta A <\/span>\n\n\n\n<p>siendo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>R = {(x,y) | \n     x<sub>0<\/sub> \u2264 x&nbsp;\u2264 x<sub>n<\/sub>, \n     y<sub>0<\/sub> \u2264 y&nbsp;\u2264 y<sub>n<\/sub> }<\/code><\/pre>\n\n\n\n<p>que es una regi\u00f3n rectangular en el plano.<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\int_{x_o}^{x_n}\\int_{y_o}^{y_n} f(x,y) \\delta y \\delta x <\/span>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\int_{y_o}^{y_n} \\int_{x_o}^{x_n} f(x,y) \\delta x \\delta y <\/span>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p>Integral <a href=\"#concepto\">doble<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxy\">algoritmo f(x,y)<\/a><\/p>\n\n\n\n<p>gr\u00e1fica:<\/p>\n\n\n\n<p><a href=\"#graficamalla\">malla<\/a><\/p>\n\n\n\n<p><a href=\"#graficabarras\">barras<\/a><a name=\"concepto\"><\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxiyj\" data-type=\"internal\" data-id=\"#algoritmofxiyj\">algoritmo f(x<sub>i<\/sub>,y<sub>j<\/sub>)<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ejercicio\">2. Ejercicio<\/h2>\n\n\n\n<p><strong>Referencia<\/strong>:&nbsp; <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-3eva20\/3eva2018tii_t1-integral-doble-con-cuadratura-de-gauss\/\" data-type=\"post\" data-id=\"3212\">3Eva2018TII_T1 Integral doble f(x,y)<\/a><\/p>\n\n\n\n<p>Aproxime el resultado de la integral doble (en \u00e1rea rectangular)<\/p>\n\n\n\n<span class=\"wp-katex-eq katex-display\" data-display=\"true\"> \\displaystyle \\int_{0}^{\\pi\/4} \\displaystyle\\int_{0}^{\\pi\/4} \\Big( 2y \\sin(x) + \\cos ^2 (x) \\Big) \\delta y \\delta x <\/span>\n\n\n\n<p>Considere los <code>tramosx = 5<\/code>&nbsp;como tama\u00f1os de paso en eje x , <code>tramosy = 4<\/code>&nbsp;como tama\u00f1os de paso en eje y.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/08\/integramultiple_wireframe_bar01.png\" alt=\"integral multiple wireframe barras 01\" class=\"wp-image-13659\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p>Integral <a href=\"#concepto\">doble<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxy\">algoritmo f(x,y)<\/a><\/p>\n\n\n\n<p>gr\u00e1fica:<\/p>\n\n\n\n<p><a href=\"#graficamalla\">malla<\/a><\/p>\n\n\n\n<p><a href=\"#graficabarras\">barras<\/a><a name=\"concepto\"><\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxiyj\" data-type=\"internal\" data-id=\"#algoritmofxiyj\">algoritmo f(x<sub>i<\/sub>,y<sub>j<\/sub>)<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"analitico\">3. Desarrollo Anal\u00edtico<\/h2>\n\n\n\n<p>Use las f\u00f3rmulas compuestas de Simpson, haciendo primero constante un valor en y, luego propagando el proceso. Al obtener los integrales en un sentido, repetir el proceso con los resultados en el otro eje.<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>j: 0 , yj&#091;0]: 0.0\nF\u00f3rmulas compuestas, tramos: 5\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 2 0 0]\n Simpson 3\/8 : 0.4378989163640264\n Simpson 1\/3 : 0.20482799857900125\n Integral: 0.6427269149430277\nj: 1 , yj&#091;1]: 0.19634954084936207\nF\u00f3rmulas compuestas, tramos: 5\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 2 0 0]\n Simpson 3\/8 : 0.4807008818748735\n Simpson 1\/3 : 0.2770455037573468\n Integral: 0.7577463856322203\nj: 2 , yj&#091;2]: 0.39269908169872414\nF\u00f3rmulas compuestas, tramos: 5\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 2 0 0]\n Simpson 3\/8 : 0.5235028473857204\n Simpson 1\/3 : 0.34926300893569256\n Integral: 0.8727658563214129\nj: 3 , yj&#091;3]: 0.5890486225480862\nF\u00f3rmulas compuestas, tramos: 5\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 2 0 0]\n Simpson 3\/8 : 0.5663048128965673\n Simpson 1\/3 : 0.42148051411403814\n Integral: 0.9877853270106054\nj: 4 , yj&#091;4]: 0.7853981633974483\nF\u00f3rmulas compuestas, tramos: 5\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 2 0 0]\n Simpson 3\/8 : 0.6091067784074142\n Simpson 1\/3 : 0.4936980192923838\n Integral: 1.1028047976997981\n\nyj: &#091;0.         0.19634954 0.39269908 0.58904862 0.78539816]\nArea por fila: &#091;0.6427269149430277, 0.7577463856322203, 0.8727658563214129, 0.9877853270106054, 1.1028047976997981]\nF\u00f3rmulas compuestas, tramos: 4\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 1 0]\n Simpson 3\/8 : 0.4802254950852897\n trapecio : 0.20524320554554915\n Integral: 0.6854687006308389\n\nIntegral doble f(x,y)\nxi &#091;0.     0.1571 0.3142 0.4712 0.6283 0.7854]\nyj &#091;0.     0.1963 0.3927 0.589  0.7854]\nd1x : &#091;0.1571 0.1571 0.1571 0.1571 0.1571]\nd2x : &#091;0. 0. 0. 0.]\nd1y : &#091;0.1963 0.1963 0.1963 0.1963]\nd2y : &#091;0. 0. 0.]\nf(x,y)\n&#091;&#091;1.     0.9755 0.9045 0.7939 0.6545 0.5   ]\n &#091;1.     1.037  1.0259 0.9722 0.8853 0.7777]\n &#091;1.     1.0984 1.1472 1.1505 1.1162 1.0554]\n &#091;1.     1.1598 1.2686 1.3287 1.347  1.333 ]\n &#091;1.     1.2213 1.3899 1.507  1.5778 1.6107]]\nIntegral Volumen: 0.6854687006308389<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p>Integral <a href=\"#concepto\">doble<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxy\">algoritmo f(x,y)<\/a><\/p>\n\n\n\n<p>gr\u00e1fica:<\/p>\n\n\n\n<p><a href=\"#graficamalla\">malla<\/a><\/p>\n\n\n\n<p><a href=\"#graficabarras\">barras<\/a><a name=\"concepto\"><\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxiyj\" data-type=\"internal\" data-id=\"#algoritmofxiyj\">algoritmo f(x<sub>i<\/sub>,y<sub>j<\/sub>)<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"algoritmofxy\">4. Algoritmo en Python<\/h2>\n\n\n\n<p>El punto de partida es usar las&nbsp;<a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-u05\/integracion-tramos-desiguales\/\" data-type=\"post\" data-id=\"11366\">F\u00f3rmulas compuestas<\/a> con \u0394x segmentos desiguales, donde el algoritmo selecciona aplicar Simpson 3\/8, Simpson 1\/3 y trapecios seg\u00fan se cumplan los requisitos.<\/p>\n\n\n\n<p>Instrucciones en Python<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Integral doble f(x,y) o de volumen\n# Formulas compuestas, tramos no iguales\n# Integraci\u00f3n Simpson 3\/8, Simpson 1\/3 y trapecio\nimport numpy as np\n\n# INGRESO\nfxy = lambda x,y: 2*y*np.sin(x)+(np.cos(x))**2 \nx0 = 0    # intervalo x\nxn = np.pi\/4\ny0 = 0    # intervalo y\nyn = np.pi\/4\ntramosx = 5 # tramos por eje\ntramosy = 4\ntitulo = 'f(x,y)'\nprecision = 4 # decimales a mostrar\n\n# PROCEDIMIENTO\nxi = np.linspace(x0,xn,tramosx+1)\nyj = np.linspace(y0,yn,tramosy+1)\nn = len(xi)\nm = len(yj)\nhx = (xn-x0)\/tramosx # tama\u00f1os de paso\nhy = (yn-y0)\/tramosy\n\n# Matriz F&#x5B;xi,yj] para f(x,y)\nXi,Yj = np.meshgrid(xi,yj)\nF = np.zeros(shape=(n,m),dtype=float)\nF = fxy(Xi,Yj)\n\ndef simpson_compuesto(xi,fi,vertabla=False,casicero=1e-7):\n    '''M\u00e9todo compuesto Simpson 3\/8, Simpson 1\/3 y trapecio\n    salida: integral,cuenta_h\n    '''\n    # vectores como arreglo, numeros reales\n    xi = np.array(xi,dtype=float)\n    fi = np.array(fi,dtype=float)\n    n = len(xi)\n\n    # M\u00e9todo compuesto Simpson 3\/8, Simpson 1\/3 y trapecio\n    cuenta_h = (-1)*np.ones(n,dtype=int) # sin usar\n    suma = 0 # integral total\n    suma_parcial =&#x5B;] # integral por cada m\u00e9todo\n    i = 0\n    while i&lt;(n-1): # i&lt;tramos, al menos un tramo\n        tramo_usado = False\n        h = xi&#x5B;i+1]-xi&#x5B;i] # tama\u00f1o de paso, supone constante\n        \n        # tres tramos iguales\n        if (tramo_usado==False) and (i+3)&lt;n:\n            d2x = np.diff(xi&#x5B;i:i+4],2) # diferencias entre tramos\n            errado = np.max(np.abs(d2x))\n            if errado&lt;casicero: # Simpson 3\/8\n                S38 = (3\/8)*h*(fi&#x5B;i]+3*fi&#x5B;i+1]+3*fi&#x5B;i+2]+fi&#x5B;i+3])\n                suma = suma + S38\n                cuenta_h&#x5B;i:i+3] = &#x5B;3,0,0] # Simpson 3\/8\n                suma_parcial.append(&#x5B;'Simpson 3\/8',S38])\n                i = i+3\n                tramo_usado = True\n\n        # dos tramos iguales\n        if (tramo_usado==False) and (i+2)&lt;n:\n            d2x = np.diff(xi&#x5B;i:i+3],2) # diferencias entre tramos\n            errado = np.max(np.abs(d2x))\n            if errado&lt;casicero: # Simpson 1\/3\n                S13 = (h\/3)*(fi&#x5B;i]+4*fi&#x5B;i+1]+fi&#x5B;i+2])\n                suma = suma + S13\n                cuenta_h&#x5B;i:i+2] = &#x5B;2,0]\n                suma_parcial.append(&#x5B;'Simpson 1\/3',S13])\n                i = i+2\n                tramo_usado = True\n                \n        # un tramo igual\n        if (tramo_usado == False) and (i+1)&lt;n:\n            trapecio = (h\/2)*(fi&#x5B;i]+fi&#x5B;i+1])\n            suma = suma + trapecio\n            cuenta_h&#x5B;i:i+1] = &#x5B;1] # usar trapecio\n            suma_parcial.append(&#x5B;'trapecio',trapecio])\n            i = i+1\n            tramo_usado = True\n            \n    cuenta_h&#x5B;n-1] = 0 # ultima casilla\n    \n    if vertabla==True: #mostrar datos parciales\n        print('F\u00f3rmulas compuestas, tramos:',n-1)\n        print('m\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado')\n        print('tramos iguales en xi:',cuenta_h)\n        for unparcial in suma_parcial:\n            print('',unparcial&#x5B;0],':',unparcial&#x5B;1])\n        print('','Integral:',suma)\n\n    return(&#x5B;suma,cuenta_h])\n\n# PROGRAMA --------------\nareaj = np.array(&#x5B;])\ncuenta_hj = np.array(&#x5B;])\nj = 0 # y&#x5B;0] constante\nfor j in range(0,tramosy+1,1): # cada yj\n    print('j:',j,', yj&#x5B;'+str(j)+']:',yj&#x5B;j])\n    fj = F&#x5B;j]\n    area,cuenta_h=simpson_compuesto(xi,fj,\n                                    vertabla=True,\n                                    casicero=1e-7)\n    areaj = np.concatenate((areaj,&#x5B;area]))\n    cuenta_hj = np.concatenate((cuenta_hj,cuenta_h))\nprint('\\nyj:',yj)\nprint('Area por fila:',areaj)\n&#x5B;area,cuenta_h] = simpson_compuesto(yj,areaj,\n                                  vertabla=True,\n                                  casicero=1e-7)\n# SALIDA\nnp.set_printoptions(precision)\nprint('\\nIntegral doble f(x,y)')\nprint('xi',xi)\nprint('yj',yj)\nprint('d1x :',np.diff(xi,1))\nprint('d2x :',np.diff(xi,2))\nprint('d1y :',np.diff(yj,1))\nprint('d2y :',np.diff(yj,2))\nprint(titulo)\nprint(F)\nprint('Integral Volumen:', area)\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p>Integral <a href=\"#concepto\">doble<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxy\">algoritmo f(x,y)<\/a><\/p>\n\n\n\n<p>gr\u00e1fica:<\/p>\n\n\n\n<p><a href=\"#graficamalla\">malla<\/a><\/p>\n\n\n\n<p><a href=\"#graficabarras\">barras<\/a><a name=\"concepto\"><\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxiyj\" data-type=\"internal\" data-id=\"#algoritmofxiyj\">algoritmo f(x<sub>i<\/sub>,y<sub>j<\/sub>)<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"graficamalla\">4. Gr\u00e1fica de malla<\/h2>\n\n\n\n<p>Permite observar la superficie de f(x,y) sobre la que se calcular\u00e1 el volumen respecto al plano x,y en cero.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/08\/integramultiple_wireframe.png\" alt=\"integral m\u00faltiple wireframe\" class=\"wp-image-13657\" \/><\/figure>\n\n\n\n<p>Instrucciones adicionales al algoritmo<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# GRAFICA 3D de malla ------\nimport matplotlib.pyplot as plt\n\n# Matriz F&#x5B;xi,yj] para f(x,y)\nXi,Yj = np.meshgrid(xi,yj)\n\n# Malla para cada eje X,Y\nfig3D = plt.figure()\ngraf3D = fig3D.add_subplot(111, projection='3d')\n\ngraf3D.plot_wireframe(Xi,Yj,F,label='f(x,y)')\ngraf3D.plot(0,0,0,'ro',label='&#x5B;0,0,0]')\n\n#entorno de gr\u00e1fica\ngraf3D.set_xlabel('x')\ngraf3D.set_ylabel('y')\ngraf3D.set_zlabel('z')\ngraf3D.set_title(titulo)\ngraf3D.legend()\ngraf3D.view_init(35, -45)\nplt.tight_layout()\n#plt.show()\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p>Integral <a href=\"#concepto\">doble<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxy\">algoritmo f(x,y)<\/a><\/p>\n\n\n\n<p>gr\u00e1fica:<\/p>\n\n\n\n<p><a href=\"#graficamalla\">malla<\/a><\/p>\n\n\n\n<p><a href=\"#graficabarras\">barras<\/a><a name=\"concepto\"><\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxiyj\" data-type=\"internal\" data-id=\"#algoritmofxiyj\">algoritmo f(x<sub>i<\/sub>,y<sub>j<\/sub>)<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"graficabarras\">5. Gr\u00e1fica de barras<\/h2>\n\n\n\n<p>Realizado para observar las barras con lados de segmentos dx=hx, dy=hy.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"480\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2017\/08\/integramultiple_bar.png\" alt=\"integral m\u00faltiple barra\" class=\"wp-image-13660\" \/><\/figure>\n\n\n\n<p>Instrucciones complementarias a la gr\u00e1fica anterior.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Grafica barras 3D ------\nfactor = 0.95 # barra proporcion dx, dy\nhx = np.min(np.diff(xi,1))\nhy = np.min(np.diff(yj,1))\n\nfig_3D = plt.figure()\ngraf_3D = fig_3D.add_subplot(111,projection='3d')\n\nF_min = np.min(&#x5B;np.min(F),0])\nF_max = np.max(&#x5B;np.max(F)])\ncolor_F = F&#x5B;:m-1,:n-1].ravel()\/F_max\ncolor_ij = plt.cm.rainbow(color_F)\n\ngraf_3D.bar3d(Xi&#x5B;:m-1,:n-1].ravel(),\n              Yj&#x5B;:m-1,:n-1].ravel(),\n              np.zeros((n-1)*(m-1)),\n              hx*factor,hy*factor,\n              F&#x5B;:m-1,:n-1].ravel(),\n              color=color_ij)\ngraf_3D.plot(0,0,0,'ro',label='&#x5B;0,0,0]')\n\n# escala eje z\ngraf_3D.set_zlim(F_min,F_max)\n\n# entorno de gr\u00e1fica\ngraf_3D.set_xlabel('xi')\ngraf_3D.set_ylabel('yj')\ngraf_3D.set_zlabel('z')\ngraf_3D.set_title(titulo)\ngraf_3D.legend()\n\n# Barra de color\ncolor_escala = plt.Normalize(F_min,F_max)\ncolor_barra = plt.cm.ScalarMappable(norm=color_escala,\n                cmap=plt.colormaps&#x5B;&quot;rainbow&quot;])\nfig_3D.colorbar(color_barra,ax=graf_3D,label=&quot;F&#x5B;xi,yj]&quot;)\n\ngraf_3D.view_init(35, -45)\nplt.tight_layout()\nplt.show()\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p>Integral <a href=\"#concepto\">doble<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxy\">algoritmo f(x,y)<\/a><\/p>\n\n\n\n<p>gr\u00e1fica:<\/p>\n\n\n\n<p><a href=\"#graficamalla\">malla<\/a><\/p>\n\n\n\n<p><a href=\"#graficabarras\">barras<\/a><a name=\"concepto\"><\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxiyj\" data-type=\"internal\" data-id=\"#algoritmofxiyj\">algoritmo f(x<sub>i<\/sub>,y<sub>j<\/sub>)<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"algoritmofxiyj\">6. Algoritmo para F(xi,yj) como muestras en Python <\/h2>\n\n\n\n<figure class=\"wp-block-image alignright size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"477\" height=\"469\" src=\"http:\/\/blog.espol.edu.ec\/algoritmos101\/files\/2015\/07\/2evaiit2017t2_islavolumen.gif\" alt=\"Volumen de la isla gr\u00e1fica 3D python\" class=\"wp-image-24927\" \/><\/figure>\n\n\n\n<p>Cuando se integra sobre muestras dadas por los vectores xi, yj, se recurre a usar formulas compuestas. Se adapta el algoritmo anterior para usar las muestras de la matriz de alturas de terreno en la isla.<\/p>\n\n\n\n<p>Las gr\u00e1ficas son las mismas que en el algoritmo anterior.<\/p>\n\n\n\n<p><strong>Ejercicio<\/strong>: <a href=\"https:\/\/blog.espol.edu.ec\/algoritmos101\/mn-2eva20\/2eva2017tii_t2-volumen-de-isla-con-simpson\/\">2Eva2017TII_T2 Volumen de isla<\/a><\/p>\n\n\n\n<p>Los valores de las muestras para el ejercicio son:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>xi = &#091;0,100,200,300,400]\nyj = &#091;0, 50,100,150]\n\nF = &#091;&#091;0,1,0,0,0],\n     &#091;1,3,1,1,0],\n     &#091;5,4,3,2,0],\n     &#091;0,0,1,1,0]]<\/code><\/pre>\n\n\n\n<p>Con lo que las instrucciones en Python son las siguientes:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code alignwide\"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# Integral doble f(x,y) o de volumen con Muestras F&#x5B;xi,yj]\n# Formulas compuestas, tramos no iguales\n# Integraci\u00f3n Simpson 3\/8, Simpson 1\/3 y trapecio\nimport numpy as np\n\n# INGRESO\nxi = &#x5B;0,100,200,300,400]\nyj = &#x5B;0, 50,100,150]\n\nF = &#x5B;&#x5B;0,1,0,0,0],\n     &#x5B;1,3,1,1,0],\n     &#x5B;5,4,3,2,0],\n     &#x5B;0,0,1,1,0]]\n\ntitulo = 'f(x,y)'\nprecision = 4 # decimales a mostrar\n\n# PROCEDIMIENTO\nxi = np.array(xi,dtype=float)\nyj = np.array(yj,dtype=float)\nF = np.array(F,dtype=float)\ntamano = np.shape(F)\nn = tamano&#x5B;0] # filas\nm = tamano&#x5B;1] # columnas\ntramosy = n-1 \ntramosx = m-1 \n\ndef simpson_compuesto(xi,fi,vertabla=False,casicero=1e-7):\n    '''M\u00e9todo compuesto Simpson 3\/8, Simpson 1\/3 y trapecio\n    salida: integral,cuenta_h\n    '''\n    # vectores como arreglo, numeros reales\n    xi = np.array(xi,dtype=float)\n    fi = np.array(fi,dtype=float)\n    n = len(xi)\n\n    # M\u00e9todo compuesto Simpson 3\/8, Simpson 1\/3 y trapecio\n    cuenta_h = (-1)*np.ones(n,dtype=int) # sin usar\n    suma = 0 # integral total\n    suma_parcial =&#x5B;] # integral por cada m\u00e9todo\n    i = 0\n    while i&lt;(n-1): # i&lt;tramos, al menos un tramo\n        tramo_usado = False\n        h = xi&#x5B;i+1]-xi&#x5B;i] # tama\u00f1o de paso, supone constante\n        \n        # tres tramos iguales\n        if (tramo_usado==False) and (i+3)&lt;n:\n            d2x = np.diff(xi&#x5B;i:i+4],2) # diferencias entre tramos\n            errado = np.max(np.abs(d2x))\n            if errado&lt;casicero: # Simpson 3\/8\n                S38 = (3\/8)*h*(fi&#x5B;i]+3*fi&#x5B;i+1]+3*fi&#x5B;i+2]+fi&#x5B;i+3])\n                suma = suma + S38\n                cuenta_h&#x5B;i:i+3] = &#x5B;3,0,0] # Simpson 3\/8\n                suma_parcial.append(&#x5B;'Simpson 3\/8',S38])\n                i = i+3\n                tramo_usado = True\n\n        # dos tramos iguales\n        if (tramo_usado==False) and (i+2)&lt;n:\n            d2x = np.diff(xi&#x5B;i:i+3],2) # diferencias entre tramos\n            errado = np.max(np.abs(d2x))\n            if errado&lt;casicero: # Simpson 1\/3\n                S13 = (h\/3)*(fi&#x5B;i]+4*fi&#x5B;i+1]+fi&#x5B;i+2])\n                suma = suma + S13\n                cuenta_h&#x5B;i:i+2] = &#x5B;2,0]\n                suma_parcial.append(&#x5B;'Simpson 1\/3',S13])\n                i = i+2\n                tramo_usado = True\n                \n        # un tramo igual\n        if (tramo_usado == False) and (i+1)&lt;n:\n            trapecio = (h\/2)*(fi&#x5B;i]+fi&#x5B;i+1])\n            suma = suma + trapecio\n            cuenta_h&#x5B;i:i+1] = &#x5B;1] # usar trapecio\n            suma_parcial.append(&#x5B;'trapecio',trapecio])\n            i = i+1\n            tramo_usado = True\n            \n    cuenta_h&#x5B;n-1] = 0 # ultima casilla\n    \n    if vertabla==True: #mostrar datos parciales\n        print('F\u00f3rmulas compuestas, tramos:',n-1)\n        print('m\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado')\n        print('tramos iguales en xi:',cuenta_h)\n        for unparcial in suma_parcial:\n            print('',unparcial&#x5B;0],':',unparcial&#x5B;1])\n        print('','Integral:',suma)\n\n    return(&#x5B;suma,cuenta_h])\n\n# PROGRAMA --------------\nareaj = &#x5B;]\ncuenta_hj = &#x5B;]\nj = 0 # y&#x5B;0] constante\nfor j in range(0,tramosy+1,1): # cada yj\n    print('j:',j,', yj&#x5B;'+str(j)+']:',yj&#x5B;j])\n    fj = F&#x5B;j]\n    area,cuenta_h=simpson_compuesto(xi,fj,\n                                    vertabla=True,\n                                    casicero=1e-7) \n    areaj = np.concatenate((areaj,&#x5B;area]))\n    cuenta_hj = np.concatenate((cuenta_hj,cuenta_h))\nprint('\\nyj:',yj)\nprint('Area por fila:',areaj)\n&#x5B;area,cuenta_h] = simpson_compuesto(yj,areaj,\n                                  vertabla=True,\n                                  casicero=1e-7)\n# SALIDA\nnp.set_printoptions(precision)\nprint('\\nIntegral doble f(x,y)')\nprint('xi',xi)\nprint('yj',yj)\nprint('d1x :',np.diff(xi,1))\nprint('d2x :',np.diff(xi,2))\nprint('d1y :',np.diff(yj,1))\nprint('d2y :',np.diff(yj,2))\nprint(titulo)\nprint(F)\nprint('Integral Volumen:', area)\n<\/pre><\/div>\n\n\n<p>El resultado del algoritmo se muestra como:<\/p>\n\n\n\n<pre class=\"wp-block-code alignwide\"><code>j: 0 , yj&#091;0]: 0.0\nF\u00f3rmulas compuestas, tramos: 4\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 1 0]\n Simpson 3\/8 : 112.5\n trapecio : 0.0\n Integral: 112.5\nj: 1 , yj&#091;1]: 50.0\nF\u00f3rmulas compuestas, tramos: 4\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 1 0]\n Simpson 3\/8 : 525.0\n trapecio : 50.0\n Integral: 575.0\nj: 2 , yj&#091;2]: 100.0\nF\u00f3rmulas compuestas, tramos: 4\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 1 0]\n Simpson 3\/8 : 1050.0\n trapecio : 100.0\n Integral: 1150.0\nj: 3 , yj&#091;3]: 150.0\nF\u00f3rmulas compuestas, tramos: 4\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 1 0]\n Simpson 3\/8 : 150.0\n trapecio : 50.0\n Integral: 200.0\nj: 0 , yj&#091;0]: 0.0\nF\u00f3rmulas compuestas, tramos: 5\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 2 0 0]\n Simpson 3\/8 : 0.4378989163640264\n Simpson 1\/3 : 0.20482799857900125\n Integral: 0.6427269149430277\nj: 1 , yj&#091;1]: 0.19634954084936207\nF\u00f3rmulas compuestas, tramos: 5\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 2 0 0]\n Simpson 3\/8 : 0.4807008818748735\n Simpson 1\/3 : 0.2770455037573468\n Integral: 0.7577463856322203\nj: 2 , yj&#091;2]: 0.39269908169872414\nF\u00f3rmulas compuestas, tramos: 5\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 2 0 0]\n Simpson 3\/8 : 0.5235028473857204\n Simpson 1\/3 : 0.34926300893569256\n Integral: 0.8727658563214129\nj: 3 , yj&#091;3]: 0.5890486225480862\nF\u00f3rmulas compuestas, tramos: 5\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 2 0 0]\n Simpson 3\/8 : 0.5663048128965673\n Simpson 1\/3 : 0.42148051411403814\n Integral: 0.9877853270106054\nj: 4 , yj&#091;4]: 0.7853981633974483\nF\u00f3rmulas compuestas, tramos: 5\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 2 0 0]\n Simpson 3\/8 : 0.6091067784074142\n Simpson 1\/3 : 0.4936980192923838\n Integral: 1.1028047976997981\n\nyj: &#091;0.         0.19634954 0.39269908 0.58904862 0.78539816]\nArea por fila: &#091;0.64272691 0.75774639 0.87276586 0.98778533 1.1028048 ]\nF\u00f3rmulas compuestas, tramos: 4\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 1 0]\n Simpson 3\/8 : 0.4802254950852897\n trapecio : 0.20524320554554915\n Integral: 0.6854687006308389\n\nIntegral doble f(x,y)\nxi &#091;0.     0.1571 0.3142 0.4712 0.6283 0.7854]\nyj &#091;0.     0.1963 0.3927 0.589  0.7854]\nd1x : &#091;0.1571 0.1571 0.1571 0.1571 0.1571]\nd2x : &#091;0. 0. 0. 0.]\nd1y : &#091;0.1963 0.1963 0.1963 0.1963]\nd2y : &#091;0. 0. 0.]\nf(x,y)\n&#091;&#091;1.     0.9755 0.9045 0.7939 0.6545 0.5   ]\n &#091;1.     1.037  1.0259 0.9722 0.8853 0.7777]\n &#091;1.     1.0984 1.1472 1.1505 1.1162 1.0554]\n &#091;1.     1.1598 1.2686 1.3287 1.347  1.333 ]\n &#091;1.     1.2213 1.3899 1.507  1.5778 1.6107]]\nIntegral Volumen: 0.6854687006308389\n\nyj: &#091;0.     0.1963 0.3927 0.589  0.7854]\nArea por fila: &#091;0.6427 0.7577 0.8728 0.9878 1.1028]\nF\u00f3rmulas compuestas, tramos: 4\nm\u00e9todos 3:Simpson3\/8, 2:Simpson1\/3, 1:Trapecio, 0:usado\ntramos iguales en xi: &#091;3 0 0 1 0]\n Simpson 3\/8 : 0.4802254950852897\n trapecio : 0.20524320554554915\n Integral: 0.6854687006308389\n\nIntegral doble f(x,y)\nxi &#091;0.     0.1571 0.3142 0.4712 0.6283 0.7854]\nyj &#091;0.     0.1963 0.3927 0.589  0.7854]\nd1x : &#091;0.1571 0.1571 0.1571 0.1571 0.1571]\nd2x : &#091;0. 0. 0. 0.]\nd1y : &#091;0.1963 0.1963 0.1963 0.1963]\nd2y : &#091;0. 0. 0.]\nf(x,y)\n&#091;&#091;1.     0.9755 0.9045 0.7939 0.6545 0.5   ]\n &#091;1.     1.037  1.0259 0.9722 0.8853 0.7777]\n &#091;1.     1.0984 1.1472 1.1505 1.1162 1.0554]\n &#091;1.     1.1598 1.2686 1.3287 1.347  1.333 ]\n &#091;1.     1.2213 1.3899 1.507  1.5778 1.6107]]\nIntegral Volumen: 0.6854687006308389<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<div class=\"wp-block-group alignwide has-medium-font-size is-content-justification-center is-layout-flex wp-container-core-group-is-layout-b02886af wp-block-group-is-layout-flex\">\n<p>Integral <a href=\"#concepto\">doble<\/a><\/p>\n\n\n\n<p><a href=\"#ejercicio\">ejercicio<\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxy\">algoritmo f(x,y)<\/a><\/p>\n\n\n\n<p>gr\u00e1fica:<\/p>\n\n\n\n<p><a href=\"#graficamalla\">malla<\/a><\/p>\n\n\n\n<p><a href=\"#graficabarras\">barras<\/a><a name=\"concepto\"><\/a><\/p>\n\n\n\n<p><a href=\"#algoritmofxiyj\" data-type=\"internal\" data-id=\"#algoritmofxiyj\">algoritmo f(x<sub>i<\/sub>,y<sub>j<\/sub>)<\/a><\/p>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n","protected":false},"excerpt":{"rendered":"<p>Integral doble ejercicio algoritmo f(x,y) gr\u00e1fica: malla barras algoritmo f(xi,yj) 1. Integrales Dobles sobre \u00e1rea rectangular Referencia: Chapra 21.5 p643, Burden 4.9 p174 Un ejemplo sencillo de integral doble es una funci\u00f3n sobre un \u00e1rea rectangular. Las t\u00e9cnicas revisadas en las secciones anteriores de pueden reutilizar para la aproximaci\u00f3n de integrales m\u00faltiples. Considere la integral [&hellip;]<\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"wp-custom-template-entrada-mn-unidades","format":"standard","meta":{"footnotes":""},"categories":[39],"tags":[],"class_list":["post-12045","post","type-post","status-publish","format-standard","hentry","category-mn-u05"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/12045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/comments?post=12045"}],"version-history":[{"count":17,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/12045\/revisions"}],"predecessor-version":[{"id":24985,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/posts\/12045\/revisions\/24985"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/media?parent=12045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/categories?post=12045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/algoritmos101\/wp-json\/wp\/v2\/tags?post=12045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}