Integrales en dos dimensiones
Contents
Integrales en dos dimensiones#
import time
print(' Última ejecución ', time.asctime() )
Última ejecución Mon Apr 10 21:43:16 2023
# general imports
%matplotlib inline
%reload_ext autoreload
%autoreload 2
# numpy and matplotlib
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
matplotlib.style.use('ggplot')
import graph_utils as gf
Estructura del tema#
Objectivos#
Extender el concepto de integral de Riemann en dos dimensiones
El Teorema de Fubini: la integral no depende del orden de integración
Principio de Cavilieri.
Integrales en regiones no rectangulares.
Cambio de variables, polares.
Mostrar algunos ejemplos sencillos
Introducción#
Recordatorio de la Suma De Riemann#
Para calcular el área bajo una curva de una función real, \(f(x)\), y el eje \(y=0\) en un intervalo \([a, b]\), habíamos introducido la integral de una dimensión.
Que la defininmos a partir de la suma de Riemann. Dada la partición de un intervalo , y una función, acotada y continua en dicho intervalo, dábamos la suma de Riemann como:
donde \(x'_i\) es un valor aleatorio entre los valores \([x_{i-1}, x_{i}]\)
También definíamos la suma superior de Riemann como:
donde ahora \(x'_i\) es el valor del intervalo \([x_i, x_{i-1}]\) donde la función \(f(x)\) es máxima.
También definíamos la suma inferior de Riemann como:
donde ahora \(x'_i\) es el valor del intervalo \([x_i, x_{i-1}]\) donde la función \(f(x)\) es mínima.
La función tenía integral en el intervalo \([a, b]\) si para particiones cada ver más finas, las tres sumas de Riemann convergían a un determinado valor, la integral.
Recordad que siempre se cumple:
Integrales 2D#
Sabemos el área entre su gráfica de una función real, \(f(x)\), en un intervalo, \([a, b], \)y el eje \(x\), corresponde a su integral definida:
El volumen bajo la gráfica de una función escalar, \(f(x, y)\), definida en una región, \([a, b]\times [c, d]\) y el plano \((x, y)\), correspondonderá al la integral definida en dos dimensiones:
Nos preguntamos ahora cuál es volumen bajo la gráfica de la función \(f(x, y)\) y el plano \((x, y)\). Sea \(f(x, y) = 2 - x^2 - y^2\) y la base dada por \([-1, 1] \times [-1, 1]\)
fun = lambda x, y : 2- x*x - y*y
gf.graph(fun, (-1., 1., 20), (-1., 1., 20));
gf.bars3d(fun, (-1., 1., 20), (-1., 1., 20));
Podemos extender la suma de Riemann a la función escalar de dos dimensiones, \(f(x, y)\) en la región \([a, b] \times [c, d]\), a partir de la partición de los intervalos \([a, b], \,[c, d]\)
donde \((x'_i, y'_j)\) es un valor aleatorio entre los valores \([x_{i-1}, x_{i}]\) e \([y_{j-1}, y_{j}]\), y \(\Delta x_i = x_i - x_{i-1}, \, \Delta y_j = y_j - y_{j-1}\)
Igualmente definimos la suma de Riemann superior e inferior, y definimos la integral si para particiones cada vez más finas, las sumas de Riemann convergen a un determinado valor, la integral:
a = gf.riemann_sum(fun, (-1., 1., 100), (-1., 1., 100))
print('Summa de Riemann = ', a, ', integral =', 16./3.);
Summa de Riemann = 5.386655728457595 , integral = 5.333333333333333
Notar que la notación de la integral recuerda la definición de la suma de Riemann.
Notar que las variables de integración son mudas, las únicas variables son los límites de integración \([a, b] \times [c, d]\).
Teorema de Fubini#
Nos dice que si una función, \(f(x, y)\), es integrable en una región \([a, b] \times [c, d]\), podemos integral en el orden que consideremos.
a = gf.bars3d(fun, (-1., 1., 20), (-1., 1., 20))
Podemos darnos cuenta que el valor entre los corchetes corresponde al área para un determinado valor fijado de \(x\) o de \(y\)
Así:
Esto es:
a = gf.bars3d(fun, (-1., 1., 20), (-1., 1., 20), acolor = 'y')
Ejercicio: Integra \(f(x, y) = x\) en el cuadrado \([0, 1] \times [0, 1]\).
fun = lambda x, y : x
gf.bars3d(fun, xrange = (0, 1, 10), yrange = (0, 1, 10), acolor = 'x');
Ejercicio: Integra la función, \(f(x, y) = y^2 \sin(x)\) en la región, \([0, \pi] \times [0, \pi]\)
fun = lambda x, y : y * y * np.sin(x)
gf.bars3d(fun, xrange = (0, np.pi, 20), yrange = (0, np.pi, 20), acolor = 'y');
Principio de Cavalieri.#
Para cuerpos de revolución, obtenidos de girar una figura alrededor de un eje.
Ejercicio: Calcula el volumen de un cono formado al girar el triángulo que tiene dos lados iguales, como en la figura.
Explora: Considera que para un determinado \(z\), el radio máximo es \(z^2\), ¿Cómo quedaría la figura?
zrange, phirange = (0., 1., 100), (0., 2.*np.pi, 100)
xfun = lambda z, phi : z * np.cos(phi)
yfun = lambda z, phi : z * np.sin(phi)
zfun = lambda z, phi : z
gf.wfsurface(xfun, yfun, zfun, zrange, phirange);
phi = 0.*np.pi/2.
trange = (0., 1., 10)
gf.line3d(lambda t: xfun(t, phi), lambda t: yfun(t, phi), lambda t: zfun(t, phi), trange, newfig = False);
gf.line3d(lambda t: xfun(t, phi), lambda t: yfun(t, phi), lambda t: zfun(1.,phi), trange, newfig = False);
gf.line3d(lambda t: 0.*t , lambda t: 0.*t , lambda t: zfun(t, phi), trange, newfig = False);
Integración en una región no rectangular.#
Considera que queremos integrar una función, \(f(x, y)\), en la región, \(R\), no necesariamente un rectángulo, por ejemplo en el siguiente triángulo:
fx = lambda t: t
fy0 = lambda t: 0. + 0.*t
fy1 = lambda t: t
trange = (0., 1, 10)
gf.line2d(fx, fy0, trange)
gf.line2d(fx, fy1, trange, newfig=False);
gf.line2d(lambda t: 1 + 0.*t, lambda t: t, trange, newfig=False);
Podemos definir la región como, los puntos que cumplen
Y la integral quedaría:
Las dos variables ya no son independientes, con esta definición la variable \(y\) depende de la \(x\). Fijado un valor de \(x\), el intervalo de integración para la \(y\) es \([0, x]\).
fx = lambda t: t
fy0 = lambda t: 0. + 0.*t
fy1 = lambda t: t
trange = (0., 1, 10)
gf.line2d(fx, fy0, trange)
gf.line2d(fx, fy1, trange, newfig=False);
#gf.line2d(lambda t: 1 + 0.*t, lambda t: t, trange, newfig=False);
O en función de \(y\)
La integral queda:
fy = lambda t: t
fx0 = lambda t: t
fx1 = lambda t: 1 + 0.*t
trange = (0., 1, 10)
gf.line2d(fx0, fy, trange)
gf.line2d(fx1, fy, trange, newfig=False);
Ejercicio: Calcula la integral de \(f(x, y) = 1\) en el triángulo anterior. ¿A qué corresponde?
de tipo I:
de tipo II:
En general si queremos integral la función, \(f(x, y)\), en una región \(R\), primero debemos definirla
de tipo I:
Donde \(\phi_0 (x)\) y \(\phi_1(x)\) son dos funciones reales que para un valor de \(x\) dan los extremos del intervalo en los que integramos \(y\).
o de tipo II:
Algunas regiones admiten los dos tipos de definiciones.
Si la región, \(R\), es de tipo I, la integral queda:
Mientras que si es de tipo II:
En el ejemplo anterior del triángulo, definido como tipo I:
definido como tipo II:
Ejercicio: Calcula la integral \(f(x, y) = y \), en el triángulo, \(\{0 \le x \le 1, \; 0 \le y \le x \}\).
fun = lambda x, y : y
condition = lambda x, y : y <= x
gf.graph(fun, (0, 1, 40), (0, 1, 40), condition);
Ejercicio
Define la región dada por el cuarto del disco de radio \(a\) en el primer cuadrante.
a = 2.
trange = (0., np.pi/2, 40)
gf.line2d(lambda t: a*np.cos(t), lambda t: 0.*t , trange)
gf.line2d(lambda t: a*np.cos(t), lambda t: a*np.sin(t), trange, newfig = False)
gf.line2d(lambda t: 0.*t , lambda t: a*np.sin(t), trange, newfig = False);
De tipo I, la región se define como:
y de tipo II:
Si queremos calcular la integral de la función, \(f(x, y) = \sqrt{a^2 - y^2}\), es mas conveniente definir la región de tipo II.
a = 2.
rrange = (0., a, 200)
cond = lambda x, y: np.sqrt(x*x + y*y) <= a
fun = lambda x, y: np.sqrt(a*a - y*y)
gf.graph(fun, rrange, rrange, cond);
Cambio de variables. Jacobiano#
En el caso anterior puede ser más conveniente realizar la integral en coordenadas polares. ¿Cómo se integra tras cambiar de coordenadas?
Observa en las figuras siguientes como la región de una sección del anillo de radio \([0.5, 1]\) y ángulo \([0, \pi/2]\) es una región rectangular en \((r, \phi)\).
Sin embargo las particiones rectángulares en \((r, \phi)\) se transforman en polígonos en el plano \((x, y)\).
Para la integrar necesitamos calcular el volumen de los prismas de la summa de Riemann cuya base son esos polígonos (que al hacer las particiones más pequeñas se convierten el paralelogramos), cuya área viene dada por los dos vectores que definen sus lados.
En las siguientes celdas te mostramos como se transforman los vectores en las particiones al hacer el cambio de coordenadas.
rsrange, phisrange = (0.5, 1, 10), (0., np.pi/2, 10)
rfun = lambda r, phi : r
pfun = lambda r, phi : phi
xfun = lambda r, phi : r * np.cos(phi)
yfun = lambda r, phi : r * np.sin(phi)
plt.subplot(1, 2, 1)
gf.wfsurface2d(rfun, pfun, rsrange, phisrange, newfig=False, xlabel='$r$', ylabel="$\phi$");
plt.subplot(1, 2, 2)
gf.wfsurface2d(xfun, yfun, rsrange, phisrange, newfig=False);
plt.gca().set_aspect(aspect = 1.); plt.tight_layout();
i, j = 2, 2
rs, phis = np.linspace(*rsrange), np.linspace(*phisrange)
plt.subplot(1, 2, 1)
gf.wfsurface2d(rfun, pfun, rsrange, phisrange, newfig=False, xlabel='$r$', ylabel="$\phi$");
ri, pj, dri, dpj = rs[i], phis[j], rs[i+1] - rs[i], phis[j+1] - phis[j]
gf.arrow(ri, pj, dri, 0., head = 0.03);
gf.arrow(ri, pj, 0. , dpj, head = 0.03);
plt.subplot(1, 2, 2)
x0, y0 = xfun(ri , pj) , yfun(ri , pj)
x1, y1 = xfun(ri + dri, pj) , yfun(ri + dri, pj)
x2, y2 = xfun(ri , pj + dpj), yfun(ri , pj+dpj)
gf.wfsurface2d(xfun, yfun, rsrange, phisrange, newfig=False);
gf.arrow(x0, y0, x1 - x0, y1 - y0, head = 0.03);
gf.arrow(x0, y0, x2 - x0, y2 - y0, head = 0.03);
plt.gca().set_aspect(aspect = 1.); plt.tight_layout();
El área de cada uno de las regiones en el plano \((x, y)\) viene dado por el producto vectorial de los vectores de sus lados.
Consideremos un cambio de variables \((u, v) \to (x, y)\). El vector entre \((u_0, v_0)\) y \((u_0 + \Delta u, v_0)\) - uno de los lados de los rectángulos en \((u, v)\)-, se transforma en el vector similar que corresponde a uno de los lados del polígono en \((x,y)\):
Y al ser el cambio diferenciable:
De igual forma, el vector \((u_0, v_0 + \Delta v) - (u_0, v_0)\), el otro lado del rectángulo en \((u, v)\), se transforma en el vector, el otro lado en \((x, y)\):
Los vectores de los lados en un espacio \((x, y)\) son
Y el área que sustentan viene dada por el valor absoluto de su producto vectorial:
Donde,
Es el determinante de la matriz jacobiana, o jacobiano.
Como el diferencial de área siempre tiene que ser positivo, ¡tomaremos el valor absoluto del jacobiano!
Así, cuando cambiamos de coordenadas
donde \(R'\) es la región definida en el espacio (\(u, v\)), \(f(u, v) = f(x(u, v), y(u, v)) \) es la función en las nuevas coordenadas, y finalmente, el diferencial de área viene dado por:
donde \(|J|\) es el valor absoluto del jacobiano del cambio de variables.
Ejercicio: Calcula la integral en el anillo comprendido entre los radios \([a, b]\) del primer cuadrante de la función \(f(x, y) = 1\) y de la función \(f(x, y) = \log(x^2 + y^2)\)
rsrange, phisrange = (0.5, 1, 20), (0., np.pi/2, 20)
xfun = lambda r, phi : r * np.cos(phi)
yfun = lambda r, phi : r * np.sin(phi)
gf.wfsurface2d(xfun, yfun, rsrange, phisrange);
plt.gca().set_aspect(aspect = 1.);
El cambio en polares es:
El Jacobiano del cambio a polares es:
Fíjate en la siguiente imagen, en cada paralelogramo, uno de los lados es \(\mathrm{d}r\) y el otro \(r \, \mathrm{d}\phi\). Y por lo tanto el diferencial de área es:
La región de integración está definida en polares:
El jacobiano del cambio de coordenadas, que calculamos antes, es: \(J = r\)
para \(f(x, y) = 1\) la integral es:
que es equivalente al área de un cuarto del anillo.
La función, \(f(x, y) = \log(x^2 + y^2)\), en polares es \(f(r, \phi) = 2 \log r\). La integral en la sección del anillo
La integral en \(\phi\), es simplemente \(\pi/2\)
La integral en \(r\) se resuelve por partes:
Luego la integral completa es:
La siguiente figura muestra la región de integración y la gráfica de la función a integrar en la región.
rrange, phirange = (1., 1.5, 20), (0, np.pi/2, 20)
xfun = lambda r, phi : r * np.cos(phi)
yfun = lambda r, phi : r * np.sin(phi)
zfun = lambda r, phi : 2 * np.log(r)
gf.wfsurface (xfun, yfun, zfun, rrange, phirange);
gf.wfsurface2d(xfun, yfun , rrange, phirange, newfig = False);