Contenido bajo licencia Creative Commons BY 4.0 y código bajo licencia MIT. © Juan Gómez y Nicolás Guarín-Zapata 2020. Este material es parte del curso Modelación Computacional en el programa de Ingeniería Civil de la Universidad EAFIT.
Discutiremos de manera breve la definición de cuadratura. Posteriormente nos concentraremos en las cuadraturas Gaussianas que por su eficiencia y facilidad de sistematización son de amplio uso en ingeniería y física. Para estas cubriremos su desarrollo general y su implementación en Python. Los detalles de la cuadratura Gaussiana y su implementación se discutirán por medio de un ejemplo.
Al completar este notebook usted debería estar en la capacidad de:
Identificar una cuadratura como una formula de evaluar integrales numéricamente.
Identificar la relación entre la función a integrar y el tipo de esquema requerido para su evaluación.
Evaluar integrales numéricamente usando cuadraturas Gaussianas.
Una cuadratura es una formula para la evaluación numerica de integrales de la forma general:
I=∫V(→x)f(→x)dV(→x)≈N∑i=1f(→xi)wi.Note que esta expresión corresponde a la evaluación de la función f(x) en N puntos de coordenadas xi multiplicados por N factores wi. Los factores se denominan pesos o factores de ponderación ya que se encargan de ponderar la contribución de cada término f(xi) a I y tienen una interpretación similar al diferencial dV. Incluso, estos últimos son los que se encargarían de aportar las unidades pertinentes a la integral (aproximada).
Una cuadratura con la cual estamos familiarizados es la regla del trapecio dada por:
I=b∫af(x)dx≈h2[f(a)+f(b)],en donde h=b−a. En esta expresión podemos reconocer los factores de ponderación w1=h/2, w2=h/2 y los puntos de evaluación x1=a y x2=b.
Por ejemplo, consideremos la siguiente integral:
I=+1∫−1(x3+4x2−10)dx≈1.0⋅f(−1)+1.0⋅f(+1)=−12.Una de las cuadraturas mas poderosas encontradas en la practica son las denominadas cuadraturas Gaussianas. En estas, los factores de ponderación wi y los puntos de evaluación xi son seleccionados de manera que se obtenga la mejor aproximación (mínimo error) de la manera más efectiva (mínimo número de puntos de evaluación). El ser formuladas usando un proceso de ajuste de 2N parámetros correspondientes a los N pesos y a los N puntos de evaluación permiten integrar de manera exacta funciones polinomiales de orden a lo sumo 2N−1.
La principal desventaja de las cuadraturas Gaussianas es el hecho de que en estas los puntos de evaluación se encuentran especificados en términos de coordenadas en el rango fijo entre x=−1 y x=+1 lo cual obliga a que sea necesario realizar una transformación previa o cambio de variable.
Para evitar confusiones en la notación denotemos el espacio en el que se indican las coordenadas de las cuadraturas Gaussianas mediante la letra r, de manera que el cambio de variables se expresa como:
I=x=b∫x=af(x)dx≡r=+1∫r=−1F(r)dr.Nótese que el cambio de variables implica:
Relacionar x y r lo que podemos escribir de forma general como x=x(r) y r=r(x).
Expresar f(x) en términos de la nueva variable de acuerdo con F(r)=f[x(r)].
Expresar dx en términos de dr.
Considere el caso de una cuadratura de 2 puntos, es decir N=2. En este caso los factores de ponderación y puntos de evaluación se especifican en la siguiente tabla:
r | w |
---|---|
−√33 | 1.0 |
+√33 | 1.0 |
Para realizar el cambio de variables asumamos que la relación entre las variables independientes x y r es lineal de manera que:
x(r)=12(a+b)+r2(b−a)≡12(a+b)+h2r,y por lo tanto:
dx=h2dr.Esto que produce la siguiente equivalencia entre las integrales en los 2 espacios:
I=x=b∫x=af(x)dx≡r=+1∫r=−1f[x(r)]h2dr.Ahora, la integral formulada en el espacio de r es fácilmente evaluable mediante las coordenadas y pesos de la tabla.
En los bloques de código que se presentan a continuación se implementa la cuadratura Gaussiana de 2 puntos para calcular la integral:
I=∫x=+1x=−1(x3+4x2−10)dx%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
import sympy as sym
def gpoints2():
"""Cuadratura de Gauss de 2 puntos"""
xw = np.zeros([2])
xp = np.zeros([2])
xw[:] = 1.0
xp[0] = -0.577350269189626
xp[1] = 0.577350269189626
return xw, xp
def transform(a, b, r):
"""
"""
h = b-a
xr = (a + b)/2.0 + h*r/2.0
return xr, h
def myfun(x):
"""
"""
fx = x**3 + 4*x**2 - 10
return fx
ngpts = 2
a = -1.0
b = +1.0
integral = 0.0
xw, xp = gpoints2()
for i in range(0, ngpts):
xr, h = transform(a, b, xp[i])
fx = myfun(xr)
integral = integral + fx*h/2.0*xw[i]
print(integral)
-17.333333333333332
Preguntas:
Modificar el código anterior para calcular la integral con una cuadratura de 3 puntos.
Repetir el cálculo de la integral anterior si ahora los límites de integración son a=0 y b=2.
Usando la cuadratura Gaussiana calcular la siguiente integral:
Cuadratura: Formula de integración numerica compuesta por un conjunto de puntos de evaluación y factores de ponderación.
Punto de integración: Punto de evaluación de la función a integrar mediante una cuadratura numérica.
Punto de Gauss: Punto de integración en una cuadratura Gaussiana.
Factor de ponderación: Constante que pondera la contribución de la función a la integral cuando esta es evaluada en un punto de integración determinado.
La figura muestra el problema de una cuña de semi-ángulo interno ϕ=π4 y lado ℓ=10.0 sometida a tracciones en las superficies inclinadas de magnitud S=1.0.
Considerando que la relaciónes deformación-desplazamiento y tensión-deformación están dadas por:
εxx=∂u∂x,εyy=∂v∂y,εxy=12(∂u∂y+∂v∂x),σxx=E1+νεxx+νE(1+ν)(1−2ν)(εxx+εyy),σyy=E1+νεyy+νE(1+ν)(1−2ν)(εxx+εyy),σxy=E2(1+ν)εxy,se pide:
asumiendo que los desplazamientos en los puntos izquierdo y derecho están dados por
→uizq=−2.0ˆı,y
→uder=+2.0ˆı,mientras que los de los puntos superior e inferior corresponden a
→usup=−2.0ˆȷ,y
→uinf=+2.0ˆȷ.La siguiente celda cambia el formato del Notebook.
from IPython.core.display import HTML
def css_styling():
styles = open('./nb_style.css', 'r').read()
return HTML(styles)
css_styling()