¿Puedo confiar en esta integral triple numérica de Matlab?


15

Gente de Ciencias Computacionales:

Me Iniciado esta cuestión en Matemáticas Pila de cambio y alguien comento que yo podría conseguir "mucho mejor" respuestas aquí:

Soy un novato en métodos numéricos y Matlab. Estoy tratando de evaluar la siguiente suma de dos integrales triples (obviamente, se puede escribir de manera más simple, pero aún así no se puede evaluar simbólicamente (?)). Tengo problemas para hacer que el funcione aquí, así que de mala gana lo partí en pedazos aquí: quiero encontrar la suma deLATEX

2((1/0.3)1)2(11/0.31r10r1r0F1(r0,r1,t)exp((0.3)2t24)dtdr0dr1),

y

2((1/ /0,3)-1)2(11/ /0,31r1r1-r0 0r1+r0 0F2(r0 0,r1,t)Exp(-(0,3)2t24 4)retrer0 0rer1),

dónde

F1(r0 0,r1,t)=t2r0 03(0,3)32r13π

y

F2(r0,r1,t)=(0.3)3π3/2(r0+r1t)4(t2+2t(r0+r1)3(r1r0)2)2288(43πr03)(43πr13).

EDITAR (2 de marzo de 2013): Alguien respondió que consiguió que Mathematica hiciera las integrales simbólicamente. Solo intenté hacer esto (con versiones simplificadas de las integrales) y Mathematica solo pudo hacer los dos exteriores del primero, y me detuve en el segundo. Agradecería algo de ayuda. Aquí esta lo que hice.:

Intenté evaluar

121r20r2r1r13t2exp(t2)r23dtdr1dr2
vía

Integrar [r1 ^ 3 / r2 ^ 3 * t ^ 2 * Exp (-t ^ 2), {t, 0, r2 - r1}, {r1, 1, r2}, {r2, 1, 2}]

y Mathematica regresa (Tuve problemas con LATEX aquí porque el resultado es largo. Lo dividí en dos ecuaciones. Si alguien sabe una buena manera de mostrar esto, dígame):

12164r22e1r22(2e2r2(25+r2(19+2r2(1+r2)))

e1+r22(32r2(2+r22))+π(11+4r22(9+r22))Erf[1r2])dr2.

Entonces traté de evaluar

121r2r2r1r2+r1

exp(t2)(r1+r2t)4(t2+2t(r1+r2)3(r2r1)2)2r13r23dtdrdr2

utilizando

Integrar [(r1 + r2 - t) ^ 4 * (t ^ 2 + 2 * t * (r1 + r2) - 3 * (r2 - r1) ^ 2) ^ 2 * Exp [-t ^ 2] / r1 ^ 3 / r2 ^ 3, {r2, 1, 2}, {r1, 1, r2}, {t, r2-r1, r2 + r1}]

justo ahora, y Mathematica no ha devuelto una respuesta después de aproximadamente media hora (pero estoy teniendo problemas de red informática en este momento, y pueden ser los culpables).

[FIN DE LA EDICIÓN DEL 2 DE MARZO]

Utilicé el comando "triplequad" de Matlab, sin opciones adicionales. Manejé los límites variables de integración por medio de funciones de cabecera, porque no conocía otra forma de hacerlo. Matlab me dio . 0.007164820144202

Sé que Matlab es un buen software, pero he oído que las integrales triples numéricas son difíciles de hacer con precisión, y se supone que los matemáticos son escépticos, por lo que quiero alguna forma de verificar la precisión de esta respuesta. Las integrales dan el valor esperado de un determinado experimento (si alguien quiere, puedo editar esta pregunta para describir el experimento): implementé el experimento en Matlab usando números generados al azar de manera apropiada, un millón de veces, y promedié los resultados. Repetí este proceso cuatro veces. Aquí están los resultados (pido disculpas si he usado la palabra "prueba" de forma incorrecta):

Prueba 1:0.007133292603256

Prueba 2:0.007120455071989

Prueba 3:0.007062595022049

Prueba 4:0.007154940168452

Prueba 5:0.007215000289130

Aunque cada ensayo utilizó un millón de muestras, los valores de simulación solo coinciden en el primer dígito significativo. No están lo suficientemente cerca el uno del otro para determinar si la triple integral numérica es precisa.

Entonces, ¿alguien puede decirme si puedo confiar en el resultado de "triplequad" aquí, y bajo qué circunstancias uno puede confiar en él en general?

Una sugerencia que recibí en Math Stack Exchange fue probar otro software como Mathematica, Octave, Maple y SciPy. ¿Es este un buen consejo? ¿La gente realmente hace trabajo numérico en Mathematica y Maple? Octave es una especie de clon de Matlab, ¿puedo asumir que usa los mismos algoritmos de integración? Ni siquiera he oído hablar de SciPy antes y agradecería cualquier opinión al respecto.


ACTUALIZACIÓN: Alguien de Math Stack Exchange lo hizo en Maple y obtuvo . Eso está de acuerdo con tres cifras significativas. Eso es un buen signo.0.007163085468

Además, agradecería sugerencias sobre cómo ingresar expresiones largas de varias líneas en en Stack Exchange. ¿Puedes usar el entorno "alineado" aquí? Lo intenté y no pude hacerlo funcionar.LATEX


2
Los resultados de su simulación son perfectamente consistentes con el valor numérico devuelto por Matlab: su media de es solo errores estándar menos de lo que Matlab devolvió. FWIW, Mathematica devuelve . También puede evaluar estas integrales simbólicamente en términos de polinomios y funciones de error. 0.007137261.110.00716308537
whuber

@whuber Gracias. Podría jurar que lo intenté simbólicamente en Maple y Maple no pudo hacerlo. Lo intentaré nuevamente en Maple, y si no funciona, lo intentaré en Mathematica. Por cierto, hice una integral similar en Maple, y obtuve una gran respuesta simbólica. Parecía ser una suma y diferencia de números muy grandes cuyo gran total era bastante pequeño. Sospecho que es probable que haya un error de redondeo en la respuesta final. En un problema como este, ¿debería usar la respuesta simbólica o simplemente hacer la integral numéricamente?
Stefan Smith

Las respuestas simbólicas tienen la ventaja de ser combinaciones de funciones que (a menudo) pueden calcularse eficientemente con precisión arbitraria. Por lo general, también, la solución simbólica también se presta a un cálculo rápido cuando los parámetros varían. Por estas razones, a menudo vale la pena buscar una solución simbólica.
whuber

@whuber: Intenté hacer algunas integrales esencialmente equivalentes (cambiar algunas de las constantes y eliminar algunas constantes multiplicativas) en Mathematica, y Mathematica solo pudo hacer las dos integraciones externas de la primera integral, y parece haberse estancado en la segunda. Publiqué mi código y resultados arriba.
Stefan Smith

1
Re Edición del 2 de marzo: al reducir la triple integral simbólicamente a una sola integral (en la primera mitad de sus integrales), ha logrado mucho. El integrando se comporta muy bien y puede integrarse numéricamente con una precisión extremadamente alta en una fracción de segundo.
whuber

Respuestas:


9

En primer lugar, no es el software (o al menos no debería serlo) el que determina la calidad de la solución a un problema, es la calidad y la idoneidad del algoritmo que se aplica. Debería verificar qué algoritmo está utilizando triplequad en Matlab (supongo que usa una cuadratura gaussiana adaptativa anidada). Y debe verificar cuáles son las tolerancias solicitadas (tolerancia absoluta y relativa requerida). Lo más probable es que, por defecto, solo pida una precisión relativa de . 108

La respuesta que proviene de Maple probablemente la realiza Computer Algebra y tal vez podría encontrar una solución cerrada que luego se evaluó utilizando coma flotante de doble precisión. Esto tiene la ventaja de que no está aproximando la integral mediante una suma finita (y, por lo tanto, está introduciendo errores de aproximación), pero el Sistema de Álgebra Computarizada encontrará una expresión para la integral que luego se puede evaluar. Por supuesto, se debe tener cuidado al evaluar esta expresión (para redondear).

Si desea hacer esto con SciPy, también deberá recurrir a la cuadratura gaussiana adaptativa anidada utilizando las rutinas subyacentes Quadpack (Piessens et al.). En Octave, tendrás el mismo enfoque. Y no me sorprendería demasiado si Matlab también usa Quadpack como motor de cuadratura (ya que es la referencia).


@GretVdE: Gracias por la información. Intenté evaluar la integral simbólicamente primero, y Maple no pudo hacerlo (por lo que probablemente era imposible, usando funciones estándar), así que le pedí a Maple que lo hiciera numéricamente. No sé qué algoritmo usó.
Stefan Smith

@StefanSmith: puede averiguar mediante el establecimiento de la InfoLevel en Maple: infolevel[`evalf/int`] := 4. ¿Estás seguro de que Mape no puede encontrar una solución cerrada? La integral no parece ser demasiado complicada. ¿Podría hacer pública su hoja de arce en alguna parte?
GertVdE

@StefanSmith: publicaría el código Maple en la pregunta anterior.
GertVdE

No puedo hacer que Maple funcione en mi sistema en este momento, pero intenté integrales equivalentes en Mathematica, y Mathematica solo hizo los dos internos de la primera triple integral, y se detuvo en la segunda triple integral. Por favor vea la pregunta editada.
Stefan Smith
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.