Dado un conjunto de puntos en [ - 1 , 1 ] , me gustaría calcular ∫ 1 - 1 L i ( x ) exactamente. L i es el polinomio de Lagrange con respecto a los puntos x j con x i como nodo, es decir, L i ( x ) = ∏ j ≠ i x - x j
Como este es un polinomio de gradon, podría usar cualquier cuadratura gaussiana de grado suficiente. Esto funciona bien sinno es demasiado grande, pero conduce a resultados defectuosos por errores de redondeo parangrande.
¿Alguna idea de cómo evitarlos?
quadrature
integration
Nico Schlömer
fuente
fuente
Respuestas:
El cálculo de∫1- 1Lk( x )d x
para los polinomios de LagrangeLk definidos en una cuadrícula arbitrariaxk,k=0,…,n
puede realizarse mediante los dos pasos siguientes:
Calcule los pesos de la cuadratura de Clenshaw-Curtiswcck en la cuadrícula extrema de Chebyshev yk para k=0,…,n :
yk=cos(kπn)wcck=ckn(1−∑j=1⌊n/2⌋bj4j2−1cos(2πjkn))
dondebk:=1 parak=n/2 , de lo contrariobk:=2 , yck:=1 parak=0 ok=n , de lo contrariock:=2 . Ver el artículo de Waldvogel (2006) para más detalles.
Transforme los pesoswcck en la cuadrícula arbitraria xk,k=0,…,n , a través de la matriz de transformación M para obtener los pesos buscados wk ,
wk=∑jMkjwccj
donde
Mjk = Lj(yk).
El algoritmo parece ser bastante estable, particularmente cuando se lo compara con el enfoque de Vandermonde según lo provisto en la respuesta de @Kirill : aunque sigue las mismas ideas: generar los pesos en cuadratura de manera conocida y luego transformarlos en la nueva cuadrícula. podría esperarse ya que la transformación en términos de la matriz de Vandermonde suele estar muy mal condicionada.
Ejemplo: generación de pesos en cuadratura Legendre-Lobatto
Ejemplo: generación de fórmulas de cuadratura de Newton-Cotes
Consideramos la generación de la fórmula de la cuadratura de Newton-Cotes en cuadrículas equidistantes. Una vez más, uno espera un mal acondicionamiento, ya que, en resumen, para la interpolación polinómica, las redes espaciadas equitativamente son malas.
Ejemplo: cuadratura de Guass-Patterson
Este ejemplo se debe a @ NicoSchlömer. No conocía estas reglas hasta ahora, así que tomé las abscisas de esta implementación y apliqué tanto el enfoque de Vandermonde como el enfoque transformado de Clenshaw-Curtis (donde, como anteriormente, el enfoque de Vandermonde está utilizando el algoritmo Björk-Pereyra).
A partir de esta imagen, el enfoque transformado de Clenshaw-Curtis parece mucho más eficiente que el enfoque de Vandermonde (al menos en aritmética de precisión finita). Aún así, Clenshaw-Curtis se desglosa a partir del índice 7, por lo que se deben utilizar otros métodos.
fuente
Salida:
Si
X
no es positivo como en esta prueba, parece que los errores relativos son del mismo orden que con una resolución lineal regular.fuente
V.main(32)
produce una respuesta sensata en aproximadamente un segundo en mi computadora portátil (mientras uso solo un poco de memoria). Los números ni siquiera son tan grandes, el numerador más grande tiene 54 dígitos, por lo que sospecho que algo más te va mal. ¿Puedes publicar una esencia, porque tengo curiosidad por ver cómo falla?Float64
parad
: consultar con@show typeof(d)
. Avísame si encuentras más problemas con él.Calcule primero los productos de los nominadores y los denominadores y luego divídalos una vez. Los dos productos deben ser del mismo orden de magnitud, por lo que no debe haber errores significativos de redondeo. También obtiene el beneficio adicional de una mayor velocidad, debido a la reducción del número de cálculos de coma flotante.
fuente