17 votos

Función de los muchachos para Gaussian integrales en cálculos ab-initio

Hace un par de días que he mencionado un problema con un Hartree-Fock programa que estoy escribiendo (HF utilizando cartesiano de Gauss STO-3G conjunto de base). Puedo reproducir la superposición y la cinética de las integrales de algunas referencias para ($\ce{H2}$, $\ce{HeH+}$ y $\ce{H_2O}$). Las cosas comienzan a cambiar (en el tercer/cuarto dígitos decimales) en el núcleo-electrón atracción integral. Al principio pensé que el error sobre el total de energía fue causado principalmente por la repulsión electrón-electrón integrales (como errores en el núcleo-electrón atracción parecer mínimo). Pero ahora estoy convencido que el problema viene de mi cálculo de los Chicos de la función $$ F_n(x) = \int_0^1 t^{2n}e^{-xt^2}\, dt. $$ Un indicio de esto proviene del hecho de que para $\ce{H2}$ $\ce{HeH+}$ todo funciona bien, y en este caso los Chicos función sólo está calculada para $n = 0$.

Con el fin de calcular esta función he utilizado integración numérica de las rutinas de SciPy (biblioteca de Python) o directamente QUADPACK (he traducido mi programa de Python en FORTRAN90). Sin embargo, buscando en la literatura parece que a nadie calcular Niños a través de la función de integración numérica. Traté de implementar diferentes versiones (recursivo, valores asintóticos, ...) de los Niños de la función, pero todos ellos con el tiempo se había problemas (dependiendo del rango de $x$ o en el valor de $n$).

Desde que estoy perdiendo demasiado tiempo en este problema, que parece ser numéricos, me preguntaba si hay alguna norma de aplicación de los Chicos de la función que simplemente puedo usar mi código. ¿Conoces algún Python, Fortran biblioteca que contiene una buena (segura y eficiente) a la aplicación de los Chicos de la función? Si no existe, no es un algoritmo simple que funciona bien en cualquier rango de $x$ y no es sensible a errores numéricos?

8voto

Jegschemesch Puntos 4093

Yo no soy consciente de que cualquier existentes código de Fortran para numérica directa de la cuadratura de este problema, pero vale la pena señalar que Mathematica puede realizar esta integral simbólicamente:

Integrate[t^(2 n) Exp[-x t^2], {t, 0, 1}]

(* 1/2 x^(-(1/2) - n) (Gamma[1/2 + n] - Gamma[1/2 + n, x]) *)

donde el $\Gamma$ función puede ser calculado por el exponentiating fáciles de encontrar, $\ln \Gamma$ funciones, a menudo llamado lngamma(). (Uno de ellos es el de Euler función de $\Gamma(z)$ y el otro incompleta $\Gamma(a,z)$ función).

Como una verificación:

With[
  {x = 1, n = 2},
  1/2 x^(-(1/2) - n) (Gamma[1/2 + n] - Gamma[1/2 + n, x])
  ] // N

(* 0.100269  *)

y numérico de la cuadratura de la producción:

With[
 {x = 1, n = 2},
 NIntegrate[t^(2 n) Exp[-x t^2], {t, 0, 1}]
 ]

(* 0.100269  *)

Uno tiene que tener un poquito de cuidado, como la $\Gamma$ función está estrechamente relacionado con el factorial, y puede explotar como los argumentos demasiado grande. Me gustaría experimentar y ver si usted puede conseguir con esta solución analítica, que básicamente lleva desde cuadratura numérica en la evaluación de funciones especiales.

El $\Gamma$ función de enfoque es más rápido por más de dos órdenes de magnitud que el de la cuadratura del enfoque. Esto es crítico cuando la evaluación molecular de las integrales. He visto las implementaciones donde los Chicos función es en realidad interpolados en lugar de evaluar, y no hay discusión sobre el error en la interpolación de ser casi insignificante, si es conveniente interpolación de funciones de base se utilizan.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X