Métodos Numéricos en Física

767
Métodos Numéricos en Física FIZ1405 S. Wallentowitz Facultad de Física, UC

Transcript of Métodos Numéricos en Física

Page 1: Métodos Numéricos en Física

Métodos Numéricos en FísicaFIZ1405

S. Wallentowitz

Facultad de Física, UC

Page 2: Métodos Numéricos en Física

Parte IFIZ1405

Page 3: Métodos Numéricos en Física

Bibliografía.

Programación:

B.W. Kernighan, D.M. RitchieProgramación en C (Addison Wesley)W.H. Press, S.A. Teukolsky, W.T. Vetterling, B.P. FlanneryNumerical Recipes en C2nd ed. (Cambridge University Press)Online: http://www.library.cornell.edu/nr/

Funciones especiales, integrales, etc.:

M. Abramowitz, I.A. StegunHandbook of mathematical functions9th ed. (Dover Publications)Online: http://www.math.sfu.ca/~cbm/aands/

Page 4: Métodos Numéricos en Física

Notas — Alternativa 1.

Tareas:

Desarollo de programas pequeños.Aplicación de programas de la clase a un problema físico.

Examen final escrito:

Preguntas con respecto al contenido del curso.Revisar y escribir pequeñas partes de un programa.

Determinación de la nota final:

NF = (NT + NE)/2

NT = promedio de las notas de las tareasNE= nota del examen final

Page 5: Métodos Numéricos en Física

Notas — Alternativa 1.

Tareas:

Desarollo de programas pequeños.Aplicación de programas de la clase a un problema físico.

Examen final escrito:

Preguntas con respecto al contenido del curso.Revisar y escribir pequeñas partes de un programa.

Determinación de la nota final:

NF = (NT + NE)/2

NT = promedio de las notas de las tareasNE= nota del examen final

Page 6: Métodos Numéricos en Física

Notas — Alternativa II.

Cada alumno hace una presentación de ca. 30min con data-showsobre un problema de la física completamente resuelto:

Presentación del problema físicoPresentación de la idéa para resolverlo numericamentePresentación del programaPresentación de los resultados y discusión de errores

Page 7: Métodos Numéricos en Física

Requisitos técnicos.

Todos los programas funcionan con un sistema LINUX que contengalos siguentes programas:

GNU C CompilerGNU makeOpcional: doxygen para producir una documentación de losprogramas

Editores posibles:

Todos son posibles, pero por favor con “UNIX carriage return”.GNU EmacsKDE kate (voy a usar este para la clase)

Aviso:Mejor no usar Windows!

Page 8: Métodos Numéricos en Física

Requisitos técnicos.

Todos los programas funcionan con un sistema LINUX que contengalos siguentes programas:

GNU C CompilerGNU makeOpcional: doxygen para producir una documentación de losprogramas

Editores posibles:

Todos son posibles, pero por favor con “UNIX carriage return”.GNU EmacsKDE kate (voy a usar este para la clase)

Aviso:Mejor no usar Windows!

Page 9: Métodos Numéricos en Física

Objectivos.

Darse cuenta de la complejitud de calculos numéricos con elcomputador.Desarollo de un conjunto de programas para una variedad deproblemas físicos.Aprender la programación de un punto de visto científico:

lengua C (ANSI C99).automatisación de la compilación (make).documentación de programas (doxygen).visualisación de datos y resultados (gnuplot, etc.).

Page 10: Métodos Numéricos en Física

Contenido.

1 Introducción2 Ecuaciones diferenciales3 Funciones especiales4 Interpolación5 Integración6 Transformación de Fourier7 Aproximación de Chebyshev8 Números aleatorios9 (Dinámica molecular)10 (Monte-Carlo)

Page 11: Métodos Numéricos en Física

Parte IIIntroducción

Page 12: Métodos Numéricos en Física

Una suma trivial.¿Cómo sumar números punto flotante con el computador?

Un ejemplo:

1,0+5,0× 10−8

+5,0× 10−8

+5,0× 10−8

+5,0× 10−8 = 1,0000002

Parece trivial pero no es trivial para el computador.

Page 13: Métodos Numéricos en Física

Implementación en C.1 /*! \file intro_sum1.c */2 #include <stdio.h>3

4 int main (void)5 6 float x;7

8 x = 1.0;9 x = x + 5.0e-8;

10 x += 5.0e-8;11 x += 5.0e-8;12 x += 5.0e-8;13

14 printf("x = %10.8f\n", x);15 return 0;16

main(): función principal del programa.x += a es lo mismo que x = x + a; /* ... */ es uncomentario.printf() es la función declarada en stdio.h para imprimir;%10.8f es el formato para imprimir.

Page 14: Métodos Numéricos en Física

Implementación en C.1 /*! \file intro_sum1.c */2 #include <stdio.h>3

4 int main (void)5 6 float x;7

8 x = 1.0;9 x = x + 5.0e-8;

10 x += 5.0e-8;11 x += 5.0e-8;12 x += 5.0e-8;13

14 printf("x = %10.8f\n", x);15 return 0;16

main(): función principal del programa.x += a es lo mismo que x = x + a; /* ... */ es uncomentario.printf() es la función declarada en stdio.h para imprimir;%10.8f es el formato para imprimir.

Page 15: Métodos Numéricos en Física

Implementación en C.1 /*! \file intro_sum1.c */2 #include <stdio.h>3

4 int main (void)5 6 float x;7

8 x = 1.0;9 x = x + 5.0e-8;

10 x += 5.0e-8;11 x += 5.0e-8;12 x += 5.0e-8;13

14 printf("x = %10.8f\n", x);15 return 0;16

main(): función principal del programa.x += a es lo mismo que x = x + a; /* ... */ es uncomentario.printf() es la función declarada en stdio.h para imprimir;%10.8f es el formato para imprimir.

Page 16: Métodos Numéricos en Física

Implementación en C.1 /*! \file intro_sum1.c */2 #include <stdio.h>3

4 int main (void)5 6 float x;7

8 x = 1.0;9 x = x + 5.0e-8;

10 x += 5.0e-8;11 x += 5.0e-8;12 x += 5.0e-8;13

14 printf("x = %10.8f\n", x);15 return 0;16

main(): función principal del programa.x += a es lo mismo que x = x + a; /* ... */ es uncomentario.printf() es la función declarada en stdio.h para imprimir;%10.8f es el formato para imprimir.

Page 17: Métodos Numéricos en Física

Compilar e ejecutar.

1 En un terminal se compila un programa:

shell> cc -o sum1.bin intro_sum1.c [RETURN]

2 Luego se ejecuta el programa:

shell> ./sum1.bin [RETURN]shell> x = 1.00000000shell>

3 Observación: Resultado no es exactamente correcto.Sale x=1.00000000 pero el resultado correcto es x = 1,00000020

Page 18: Métodos Numéricos en Física

Compilar e ejecutar.

1 En un terminal se compila un programa:

shell> cc -o sum1.bin intro_sum1.c [RETURN]

2 Luego se ejecuta el programa:

shell> ./sum1.bin [RETURN]shell> x = 1.00000000shell>

3 Observación: Resultado no es exactamente correcto.Sale x=1.00000000 pero el resultado correcto es x = 1,00000020

Page 19: Métodos Numéricos en Física

Compilar e ejecutar.

1 En un terminal se compila un programa:

shell> cc -o sum1.bin intro_sum1.c [RETURN]

2 Luego se ejecuta el programa:

shell> ./sum1.bin [RETURN]shell> x = 1.00000000shell>

3 Observación: Resultado no es exactamente correcto.Sale x=1.00000000 pero el resultado correcto es x = 1,00000020

Page 20: Métodos Numéricos en Física

Método más inteligente.

1 /*! \file intro_sum2.c */2 /* First small then large stuff. */3 #include <stdio.h>4

5 int main (void)6 7 float x;8

9 x = 5.0e-8;10 x += 5.0e-8;11 x += 5.0e-8;12 x += 5.0e-8;13 x += 1.0;14

15 printf("x = %10.8f\n", x);16 return 0;17

Resultado es:

shell> cc -o sum2.bin intro_sum2.c [RETURN]shell> ./sum2.bin [RETURN]shell> x = 1.00000024shell>

Page 21: Métodos Numéricos en Física

Representación binaria de un número punto flotante.Estandard IEEE.

x = (sign bit) (mantisa) (exponente)

Sign bit s = 0,1 → ±.Mantisa m son p bits, donde p es la precisión, por ejemplom = 10101 con p = 5.Exponente e de dos bits por ejemplo:

00 → −101 → 010 → +111 → +2

Representación decimal:

x = (−1)s ×(m

2p

)× 2e

= (−1)s ×m × 2e−p

Page 22: Métodos Numéricos en Física

Representación binaria de un número punto flotante.Estandard IEEE.

x = (sign bit) (mantisa) (exponente)

Sign bit s = 0,1 → ±.Mantisa m son p bits, donde p es la precisión, por ejemplom = 10101 con p = 5.Exponente e de dos bits por ejemplo:

00 → −101 → 010 → +111 → +2

Representación decimal:

x = (−1)s ×(m

2p

)× 2e

= (−1)s ×m × 2e−p

Page 23: Métodos Numéricos en Física

Representación binaria de un número punto flotante.Estandard IEEE.

x = (sign bit) (mantisa) (exponente)

Sign bit s = 0,1 → ±.Mantisa m son p bits, donde p es la precisión, por ejemplom = 10101 con p = 5.Exponente e de dos bits por ejemplo:

00 → −101 → 010 → +111 → +2

Representación decimal:

x = (−1)s ×(m

2p

)× 2e

= (−1)s ×m × 2e−p

Page 24: Métodos Numéricos en Física

Representación binaria de un número punto flotante.Estandard IEEE.

x = (sign bit) (mantisa) (exponente)

Sign bit s = 0,1 → ±.Mantisa m son p bits, donde p es la precisión, por ejemplom = 10101 con p = 5.Exponente e de dos bits por ejemplo:

00 → −101 → 010 → +111 → +2

Representación decimal:

x = (−1)s ×(m

2p

)× 2e

= (−1)s ×m × 2e−p

Page 25: Métodos Numéricos en Física

Representación binaria de un número punto flotante.Estandard IEEE.

x = (sign bit) (mantisa) (exponente)

Sign bit s = 0,1 → ±.Mantisa m son p bits, donde p es la precisión, por ejemplom = 10101 con p = 5.Exponente e de dos bits por ejemplo:

00 → −101 → 010 → +111 → +2

Representación decimal:

x = (−1)s ×(m

2p

)× 2e

= (−1)s ×m × 2e−p

Page 26: Métodos Numéricos en Física

Ejemplo.

Una representación de un número punto flotante de 8 bit (1 byte) conprecisión p = 5 y dos bits para el exponente:

x = 01010110

Coresponde a s = 0, m = 10101 (= decimal 21), y e = 10(→ +1)El número decimal es:

x = (−1)s ×m × 2e−p

= (−1)0 × 21× 25−1

= 21/16= 1,3125

Page 27: Métodos Numéricos en Física

Ejemplo.

Una representación de un número punto flotante de 8 bit (1 byte) conprecisión p = 5 y dos bits para el exponente:

x = 01010110

Coresponde a s = 0, m = 10101 (= decimal 21), y e = 10(→ +1)El número decimal es:

x = (−1)s ×m × 2e−p

= (−1)0 × 21× 25−1

= 21/16= 1,3125

Page 28: Métodos Numéricos en Física

Ejemplo.

Una representación de un número punto flotante de 8 bit (1 byte) conprecisión p = 5 y dos bits para el exponente:

x = 01010110

Coresponde a s = 0, m = 10101 (= decimal 21), y e = 10(→ +1)El número decimal es:

x = (−1)s ×m × 2e−p

= (−1)0 × 21× 25−1

= 21/16= 1,3125

Page 29: Métodos Numéricos en Física

Posibles valores.

Representación de 8 bits con precisión p = 5 y dos bits para elexponente (signo es irrelevante):

1 Existe un valor (absoluto) maximal:

x = 0 11111 11 → 3,875

2 Existe un valor (absoluto) minimal diferente de cero:

x = 0 00001 00 → 0,015625

3 Los posibles valores actualmente no son equidistantes en unarepresentación decimal:

0,015625

0 0,015625 0,03125 0,046875 3,75 3,875

0,125

Page 30: Métodos Numéricos en Física

Posibles valores.

Representación de 8 bits con precisión p = 5 y dos bits para elexponente (signo es irrelevante):

1 Existe un valor (absoluto) maximal:

x = 0 11111 11 → 3,875

2 Existe un valor (absoluto) minimal diferente de cero:

x = 0 00001 00 → 0,015625

3 Los posibles valores actualmente no son equidistantes en unarepresentación decimal:

0,015625

0 0,015625 0,03125 0,046875 3,75 3,875

0,125

Page 31: Métodos Numéricos en Física

Posibles valores.

Representación de 8 bits con precisión p = 5 y dos bits para elexponente (signo es irrelevante):

1 Existe un valor (absoluto) maximal:

x = 0 11111 11 → 3,875

2 Existe un valor (absoluto) minimal diferente de cero:

x = 0 00001 00 → 0,015625

3 Los posibles valores actualmente no son equidistantes en unarepresentación decimal:

0,015625

0 0,015625 0,03125 0,046875 3,75 3,875

0,125

Page 32: Métodos Numéricos en Física

Posibles valores.

Representación de 8 bits con precisión p = 5 y dos bits para elexponente (signo es irrelevante):

1 Existe un valor (absoluto) maximal:

x = 0 11111 11 → 3,875

2 Existe un valor (absoluto) minimal diferente de cero:

x = 0 00001 00 → 0,015625

3 Los posibles valores actualmente no son equidistantes en unarepresentación decimal:

0,015625

0 0,015625 0,03125 0,046875 3,75 3,875

0,125

Page 33: Métodos Numéricos en Física

Tipos punto flotante para AMD/Intel.

Tipo en ANSI C float double

# bits 32 64precisión binaria (p) 24 53precisión decimal 6 15val. bin. del exp. −125 . . .128 −1021 . . .1024val. dec. del exp. −37 . . .38 −307 . . .308

valor minimal ≈ 1,18× 10−38 ≈ 2,23× 10−308

valor maximal ≈ 3,40× 1038 ≈ 1,80× 10308

epsilon ≈ 1,19× 10−7 ≈ 2,22× 10−16

Existen también long double y long long double.

Significativo del “epsilon”:Es el valor minimal para que 1.0 + epsilon != 1.0

Entonces es la precisión decimal para valores alrededor de 1,0.

Page 34: Métodos Numéricos en Física

Tipos punto flotante para AMD/Intel.

Tipo en ANSI C float double

# bits 32 64precisión binaria (p) 24 53precisión decimal 6 15val. bin. del exp. −125 . . .128 −1021 . . .1024val. dec. del exp. −37 . . .38 −307 . . .308

valor minimal ≈ 1,18× 10−38 ≈ 2,23× 10−308

valor maximal ≈ 3,40× 1038 ≈ 1,80× 10308

epsilon ≈ 1,19× 10−7 ≈ 2,22× 10−16

Existen también long double y long long double.

Significativo del “epsilon”:Es el valor minimal para que 1.0 + epsilon != 1.0

Entonces es la precisión decimal para valores alrededor de 1,0.

Page 35: Métodos Numéricos en Física

Problemas típicos.

Perdida de precisión:Tiene muchas causas, la más comúna es la combinación denumeros con valores muy distintos.Error underflow:Resultados temporarios son más pequeños que el valor minimal,el procesador los reemplazo con ceros.Error overflow:Resultados temporarios son más grande que el valor maximal, elprocesador continua con números más o menos aleatorios. Saleun mensaje “nan” (not a number) o “inf” (infinity).¿Entonces qué se puede hacer?Cuidarse mucho y obtener suficiente experiencia (trial & error).

Page 36: Métodos Numéricos en Física

Problemas típicos.

Perdida de precisión:Tiene muchas causas, la más comúna es la combinación denumeros con valores muy distintos.Error underflow:Resultados temporarios son más pequeños que el valor minimal,el procesador los reemplazo con ceros.Error overflow:Resultados temporarios son más grande que el valor maximal, elprocesador continua con números más o menos aleatorios. Saleun mensaje “nan” (not a number) o “inf” (infinity).¿Entonces qué se puede hacer?Cuidarse mucho y obtener suficiente experiencia (trial & error).

Page 37: Métodos Numéricos en Física

Problemas típicos.

Perdida de precisión:Tiene muchas causas, la más comúna es la combinación denumeros con valores muy distintos.Error underflow:Resultados temporarios son más pequeños que el valor minimal,el procesador los reemplazo con ceros.Error overflow:Resultados temporarios son más grande que el valor maximal, elprocesador continua con números más o menos aleatorios. Saleun mensaje “nan” (not a number) o “inf” (infinity).¿Entonces qué se puede hacer?Cuidarse mucho y obtener suficiente experiencia (trial & error).

Page 38: Métodos Numéricos en Física

Problemas típicos.

Perdida de precisión:Tiene muchas causas, la más comúna es la combinación denumeros con valores muy distintos.Error underflow:Resultados temporarios son más pequeños que el valor minimal,el procesador los reemplazo con ceros.Error overflow:Resultados temporarios son más grande que el valor maximal, elprocesador continua con números más o menos aleatorios. Saleun mensaje “nan” (not a number) o “inf” (infinity).¿Entonces qué se puede hacer?Cuidarse mucho y obtener suficiente experiencia (trial & error).

Page 39: Métodos Numéricos en Física

Otro ejemplo.

1 /*! \file intro_number.c */2

3 #include <stdio.h>4

5 int main (void)6 7 printf("1.2 = %21.20f\n", 1.2);8 return 0;9

Compilar e ejecutar:

shell> cc -o number.bin intro_number.c [RETURN]shell> ./number.bin [RETURN]shell> 1.2 = 1.19999999999999995559shell>

Page 40: Métodos Numéricos en Física

Números integros.

Tipo integro valor minimal valor maximalint −32767 +32767

long int −2147483647 +2147483647long long int −(263 − 1) 263 − 1unsigned int 0 65535

unsigned long int 0 4294967295unsigned long long int 0 264 − 1

Aparte de eso hay:short int = int

unsigned short int = unsigned int.Otros tipos importantes:

char para letras (−127 . . .+ 127 o 0 . . .255)void para “nada”.

Page 41: Métodos Numéricos en Física

Formatos para imprimir.

1 /*! \file intro_print.c */2 #include <stdio.h>3

4 int main(void)5 6 float x;7 int i;8

9 x = 1.542e-3;10 i = 9845;11 printf("Huhu...some stupid output:\n"12 "x = %f = %e\n"13 "i = %d\n", x, x, i);14 return 0;15

Formato Resultado%f 0.001542

%e 1.542e-3

%g %f o %e%d para números integros

Page 42: Métodos Numéricos en Física

Obtener información.Para cualquier programa o función hay una “manual page”.

Resultado de:shell> man 3 printf [RETURN]

Page 43: Métodos Numéricos en Física

Parte IIIEcuaciones Diferenciales

Page 44: Métodos Numéricos en Física

Ecuación diferencial ordinaria.Ecuaciones diferenciales ordinarias del orden 1:

d~x(t)dt

= ~f (~x , t)

Es un sistema de ecuaciones diferenciales acopladas!

Siempre se puede escribir una ecuación diferencial ordinaria enel orden 1:

~x = ~f (~x , ~x , t)

Vamos a definir ~y = ~x :

~x = ~y

~y = ~f (~x , ~y , t)

es lo mismo que:

d~zdt

=ddt

(~x~y

)=

(~y

~f (~x , ~y , t)

)= ~g(~z, t)

Page 45: Métodos Numéricos en Física

Ecuación diferencial ordinaria.Ecuaciones diferenciales ordinarias del orden 1:

d~x(t)dt

= ~f (~x , t)

Es un sistema de ecuaciones diferenciales acopladas!

Siempre se puede escribir una ecuación diferencial ordinaria enel orden 1:

~x = ~f (~x , ~x , t)

Vamos a definir ~y = ~x :

~x = ~y

~y = ~f (~x , ~y , t)

es lo mismo que:

d~zdt

=ddt

(~x~y

)=

(~y

~f (~x , ~y , t)

)= ~g(~z, t)

Page 46: Métodos Numéricos en Física

Ecuación diferencial ordinaria.Ecuaciones diferenciales ordinarias del orden 1:

d~x(t)dt

= ~f (~x , t)

Es un sistema de ecuaciones diferenciales acopladas!

Siempre se puede escribir una ecuación diferencial ordinaria enel orden 1:

~x = ~f (~x , ~x , t)

Vamos a definir ~y = ~x :

~x = ~y

~y = ~f (~x , ~y , t)

es lo mismo que:

d~zdt

=ddt

(~x~y

)=

(~y

~f (~x , ~y , t)

)= ~g(~z, t)

Page 47: Métodos Numéricos en Física

Ecuación diferencial ordinaria.Ecuaciones diferenciales ordinarias del orden 1:

d~x(t)dt

= ~f (~x , t)

Es un sistema de ecuaciones diferenciales acopladas!

Siempre se puede escribir una ecuación diferencial ordinaria enel orden 1:

~x = ~f (~x , ~x , t)

Vamos a definir ~y = ~x :

~x = ~y

~y = ~f (~x , ~y , t)

es lo mismo que:

d~zdt

=ddt

(~x~y

)=

(~y

~f (~x , ~y , t)

)= ~g(~z, t)

Page 48: Métodos Numéricos en Física

Método de Euler.Ahora solo una ecuación diferencial: ~x → x .

Definición de la derivada:

dx(t)dt

= l«ım∆t→0

x(t + ∆t)− x(t)∆t

Con paso ∆t finito:

x(t + ∆t) ≈ x(t) + ∆tdx(t)

dt= x(t) + ∆t f (x , t)

Método de Euler:

xn+1 ≈ xn + ∆t f (xn, tn)

donde xn = x(tn) con tn+1 = tn + ∆t .

Page 49: Métodos Numéricos en Física

Método de Euler.Ahora solo una ecuación diferencial: ~x → x .

Definición de la derivada:

dx(t)dt

= l«ım∆t→0

x(t + ∆t)− x(t)∆t

Con paso ∆t finito:

x(t + ∆t) ≈ x(t) + ∆tdx(t)

dt= x(t) + ∆t f (x , t)

Método de Euler:

xn+1 ≈ xn + ∆t f (xn, tn)

donde xn = x(tn) con tn+1 = tn + ∆t .

Page 50: Métodos Numéricos en Física

Error.

Según la expansión de Taylor:

xn+1 = x(tn+1) = x(tn) + (tn+1 − tn)dx(t)

dt

∣∣∣∣t=tn

+(tn+1 − tn)2

2!

d2x(t)dt2

∣∣∣∣t=tn

+ . . .

= xn + ∆t f (xn, tn) +O[(∆t)2]

Entonces el error es del orden (∆t)2! Este error no es aceptable!

Page 51: Métodos Numéricos en Física

Error.

Según la expansión de Taylor:

xn+1 = x(tn+1) = x(tn) + (tn+1 − tn)dx(t)

dt

∣∣∣∣t=tn

+(tn+1 − tn)2

2!

d2x(t)dt2

∣∣∣∣t=tn

+ . . .

= xn + ∆t f (xn, tn) +O[(∆t)2]

Entonces el error es del orden (∆t)2! Este error no es aceptable!

Page 52: Métodos Numéricos en Física

Idéa de Euler.

ttn

x

xn

Page 53: Métodos Numéricos en Física

Idéa de Euler.

ttn+1tn

x

xn+1

xn

Page 54: Métodos Numéricos en Física

Idéa de Euler.

ttn+1tn

x

xn+1

xn

Page 55: Métodos Numéricos en Física

Idéa de Euler.

ttn+1tn tn+2

x

xn+1

xn

Page 56: Métodos Numéricos en Física

Idéa de Runge-Kutta.Tomar derivada en la mitad!

t

x

xn

tn+1tn

Page 57: Métodos Numéricos en Física

Idéa de Runge-Kutta.Tomar derivada en la mitad!

t

x

xn

tn+1tn

Page 58: Métodos Numéricos en Física

Idéa de Runge-Kutta.Tomar derivada en la mitad!

t

x

xn

tn+1tn

∆t2

∆t2

Page 59: Métodos Numéricos en Física

Idéa de Runge-Kutta.Tomar derivada en la mitad!

t

x

xn

tn+1tn

∆t2

∆t2

Page 60: Métodos Numéricos en Física

Runge-Kutta de orden 2.

t

x

xn

tn

∆t2

∆t2

tn+1

k1

1 Derivada en el comienzo:

k1 = ∆t f (xn, tn)

2 Derivada en la mitad:

k2 = ∆t f(

xn +k1

2, tn +

∆t2

)3 Runge-Kutta del orden 2:

xn+1 = xn + k2 +O[(∆t)3]

Page 61: Métodos Numéricos en Física

Runge-Kutta de orden 2.

t

x

xn

tn

∆t2

∆t2

tn+1

k1

1 Derivada en el comienzo:

k1 = ∆t f (xn, tn)

2 Derivada en la mitad:

k2 = ∆t f(

xn +k1

2, tn +

∆t2

)3 Runge-Kutta del orden 2:

xn+1 = xn + k2 +O[(∆t)3]

Page 62: Métodos Numéricos en Física

Runge-Kutta de orden 2.

t

x

xn

tn

∆t2

∆t2

tn+1

k1

1 Derivada en el comienzo:

k1 = ∆t f (xn, tn)

2 Derivada en la mitad:

k2 = ∆t f(

xn +k1

2, tn +

∆t2

)3 Runge-Kutta del orden 2:

xn+1 = xn + k2 +O[(∆t)3]

Page 63: Métodos Numéricos en Física

Runge-Kutta de orden 2.

t

x

xn

tn

∆t2

∆t2

tn+1

k1

1 Derivada en el comienzo:

k1 = ∆t f (xn, tn)

2 Derivada en la mitad:

k2 = ∆t f(

xn +k1

2, tn +

∆t2

)3 Runge-Kutta del orden 2:

xn+1 = xn + k2 +O[(∆t)3]

Page 64: Métodos Numéricos en Física

Evaluación del error.

Runge-Kutta del orden 2 dice:

xn+1 = xn + ∆t f[xn +

∆t2

f (xn, tn), tn +∆t2

]Expansión de Taylor con respecto al tiempo:

≈ xn + ∆t

f[xn +

∆t2

f (xn, tn), tn

]+

∆t2

df[xn + ∆t

2 f (xn, tn), t]

dt

∣∣∣∣∣t=tn

+O[(∆t)2]

≈ xn + ∆t

dx(t)

dt+

∆t2

d2x(t)dt2

∣∣∣∣t=tn

+O[(∆t)2]

= xn + ∆tdx(t)

dt

∣∣∣∣t=tn

+(∆t)2

2!

d2x(t)dt2

∣∣∣∣t=tn

+O[(∆t)3]

Page 65: Métodos Numéricos en Física

Evaluación del error.

Runge-Kutta del orden 2 dice:

xn+1 = xn + ∆t f[xn +

∆t2

f (xn, tn), tn +∆t2

]Expansión de Taylor con respecto al tiempo:

≈ xn + ∆t

f[xn +

∆t2

f (xn, tn), tn

]+

∆t2

df[xn + ∆t

2 f (xn, tn), t]

dt

∣∣∣∣∣t=tn

+O[(∆t)2]

≈ xn + ∆t

dx(t)

dt+

∆t2

d2x(t)dt2

∣∣∣∣t=tn

+O[(∆t)2]

= xn + ∆tdx(t)

dt

∣∣∣∣t=tn

+(∆t)2

2!

d2x(t)dt2

∣∣∣∣t=tn

+O[(∆t)3]

Page 66: Métodos Numéricos en Física

RK2.Runge-Kutta del orden 2.

RK2:Calcular coeficientes:

k1 = ∆t f (xn, tn)

k2 = ∆t f(

xn +k1

2, tn +

∆t2

)Aproximación RK2:

xn+1 = xn + k2 +O[(∆t)3]

Necesita 2 evaluaciones de la función f (x , t)!

Page 67: Métodos Numéricos en Física

RK4.Runge-Kutta del orden 4.

t

x

xn

tn tn+1

k1

1

Page 68: Métodos Numéricos en Física

RK4.Runge-Kutta del orden 4.

t

x

xn

tn tn+1

1

2k2

Page 69: Métodos Numéricos en Física

RK4.Runge-Kutta del orden 4.

t

x

xn

tn tn+1

1

k32

3

Page 70: Métodos Numéricos en Física

RK4.Runge-Kutta del orden 4.

t

x

xn

tn+1

1

2

3k4

tn

Page 71: Métodos Numéricos en Física

En detalle.

Secuencia de la calculación:

1 k1 = ∆t f (xn, tn)2 k2 = ∆t f (xn + k1

2 , tn + ∆t2 )

3 k3 = ∆t f (xn + k22 , tn + ∆t

2 )

4 k4 = ∆t f (xn + k3, tn + ∆t)

”Promediar” las derivadas: RK4

xn+1 = xn +16

(k1 + 2k2 + 2k3 + k4) +O[(∆t)5]

Se necesitan 4 evaluaciones de f (x , t)!

Page 72: Métodos Numéricos en Física

En detalle.

Secuencia de la calculación:

1 k1 = ∆t f (xn, tn)2 k2 = ∆t f (xn + k1

2 , tn + ∆t2 )

3 k3 = ∆t f (xn + k22 , tn + ∆t

2 )

4 k4 = ∆t f (xn + k3, tn + ∆t)

”Promediar” las derivadas: RK4

xn+1 = xn +16

(k1 + 2k2 + 2k3 + k4) +O[(∆t)5]

Se necesitan 4 evaluaciones de f (x , t)!

Page 73: Métodos Numéricos en Física

En detalle.

Secuencia de la calculación:

1 k1 = ∆t f (xn, tn)2 k2 = ∆t f (xn + k1

2 , tn + ∆t2 )

3 k3 = ∆t f (xn + k22 , tn + ∆t

2 )

4 k4 = ∆t f (xn + k3, tn + ∆t)

”Promediar” las derivadas: RK4

xn+1 = xn +16

(k1 + 2k2 + 2k3 + k4) +O[(∆t)5]

Se necesitan 4 evaluaciones de f (x , t)!

Page 74: Métodos Numéricos en Física

En detalle.

Secuencia de la calculación:

1 k1 = ∆t f (xn, tn)2 k2 = ∆t f (xn + k1

2 , tn + ∆t2 )

3 k3 = ∆t f (xn + k22 , tn + ∆t

2 )

4 k4 = ∆t f (xn + k3, tn + ∆t)

”Promediar” las derivadas: RK4

xn+1 = xn +16

(k1 + 2k2 + 2k3 + k4) +O[(∆t)5]

Se necesitan 4 evaluaciones de f (x , t)!

Page 75: Métodos Numéricos en Física

En detalle.

Secuencia de la calculación:

1 k1 = ∆t f (xn, tn)2 k2 = ∆t f (xn + k1

2 , tn + ∆t2 )

3 k3 = ∆t f (xn + k22 , tn + ∆t

2 )

4 k4 = ∆t f (xn + k3, tn + ∆t)

”Promediar” las derivadas: RK4

xn+1 = xn +16

(k1 + 2k2 + 2k3 + k4) +O[(∆t)5]

Se necesitan 4 evaluaciones de f (x , t)!

Page 76: Métodos Numéricos en Física

Runge-Kutta del orden N en general.

k1 = ∆t f (xn, tn)k2 = ∆t f (xn + b2,1k1, tn + a2∆t)

...

kM = ∆t f (xn +M−1∑m=1

bM,mkm, tn + aM∆t)

xn+1 = xn +M∑

m=1

cmkm +O[(∆t)N+1] , M∑

m=1

cm = 1

Solo para N ≤ 4 :M = N que significa N evaluaciones de lafunción f (x , t).Para N > 4: M > N y hay varios posibilidades para loscoeficientes bm,n, am, cm!Elección de los coeficientes determina el orden del error N + 1.

Page 77: Métodos Numéricos en Física

Runge-Kutta del orden N en general.

k1 = ∆t f (xn, tn)k2 = ∆t f (xn + b2,1k1, tn + a2∆t)

...

kM = ∆t f (xn +M−1∑m=1

bM,mkm, tn + aM∆t)

xn+1 = xn +M∑

m=1

cmkm +O[(∆t)N+1] , M∑

m=1

cm = 1

Solo para N ≤ 4 :M = N que significa N evaluaciones de lafunción f (x , t).Para N > 4: M > N y hay varios posibilidades para loscoeficientes bm,n, am, cm!Elección de los coeficientes determina el orden del error N + 1.

Page 78: Métodos Numéricos en Física

Runge-Kutta del orden N en general.

k1 = ∆t f (xn, tn)k2 = ∆t f (xn + b2,1k1, tn + a2∆t)

...

kM = ∆t f (xn +M−1∑m=1

bM,mkm, tn + aM∆t)

xn+1 = xn +M∑

m=1

cmkm +O[(∆t)N+1] , M∑

m=1

cm = 1

Solo para N ≤ 4 :M = N que significa N evaluaciones de lafunción f (x , t).Para N > 4: M > N y hay varios posibilidades para loscoeficientes bm,n, am, cm!Elección de los coeficientes determina el orden del error N + 1.

Page 79: Métodos Numéricos en Física

Runge-Kutta del orden N en general.

k1 = ∆t f (xn, tn)k2 = ∆t f (xn + b2,1k1, tn + a2∆t)

...

kM = ∆t f (xn +M−1∑m=1

bM,mkm, tn + aM∆t)

xn+1 = xn +M∑

m=1

cmkm +O[(∆t)N+1] , M∑

m=1

cm = 1

Solo para N ≤ 4 :M = N que significa N evaluaciones de lafunción f (x , t).Para N > 4: M > N y hay varios posibilidades para loscoeficientes bm,n, am, cm!Elección de los coeficientes determina el orden del error N + 1.

Page 80: Métodos Numéricos en Física

Control del error.Idéa simple.

1 Usar Runge-Kutta del orden 4 con paso ∆t :

x (1)(t + ∆t) = x(t + ∆t) +O[(∆t)5]

2 Usar en secuencia dos veces Runge-Kutta del orden 4 conpasos ∆t/2:

x (2)(t + ∆t) = x(t + ∆t) + 2×O[(∆t/2)5]

3 Comparar las soluciones:

error =∣∣∣x (1)(t + ∆t)− x (2)(t + ∆t)

∣∣∣ = O[(∆t)5]

4 “Optimizar”:

x (opt)(t + ∆t) =115

[16 x (2)(t + ∆t)− x (1)(t + ∆t)

]+O

[(∆t)6]

Page 81: Métodos Numéricos en Física

Control del error.Idéa simple.

1 Usar Runge-Kutta del orden 4 con paso ∆t :

x (1)(t + ∆t) = x(t + ∆t) +O[(∆t)5]

2 Usar en secuencia dos veces Runge-Kutta del orden 4 conpasos ∆t/2:

x (2)(t + ∆t) = x(t + ∆t) + 2×O[(∆t/2)5]

3 Comparar las soluciones:

error =∣∣∣x (1)(t + ∆t)− x (2)(t + ∆t)

∣∣∣ = O[(∆t)5]

4 “Optimizar”:

x (opt)(t + ∆t) =115

[16 x (2)(t + ∆t)− x (1)(t + ∆t)

]+O

[(∆t)6]

Page 82: Métodos Numéricos en Física

Control del error.Idéa simple.

1 Usar Runge-Kutta del orden 4 con paso ∆t :

x (1)(t + ∆t) = x(t + ∆t) +O[(∆t)5]

2 Usar en secuencia dos veces Runge-Kutta del orden 4 conpasos ∆t/2:

x (2)(t + ∆t) = x(t + ∆t) + 2×O[(∆t/2)5]

3 Comparar las soluciones:

error =∣∣∣x (1)(t + ∆t)− x (2)(t + ∆t)

∣∣∣ = O[(∆t)5]

4 “Optimizar”:

x (opt)(t + ∆t) =115

[16 x (2)(t + ∆t)− x (1)(t + ∆t)

]+O

[(∆t)6]

Page 83: Métodos Numéricos en Física

Control del error.Idéa simple.

1 Usar Runge-Kutta del orden 4 con paso ∆t :

x (1)(t + ∆t) = x(t + ∆t) +O[(∆t)5]

2 Usar en secuencia dos veces Runge-Kutta del orden 4 conpasos ∆t/2:

x (2)(t + ∆t) = x(t + ∆t) + 2×O[(∆t/2)5]

3 Comparar las soluciones:

error =∣∣∣x (1)(t + ∆t)− x (2)(t + ∆t)

∣∣∣ = O[(∆t)5]

4 “Optimizar”:

x (opt)(t + ∆t) =115

[16 x (2)(t + ∆t)− x (1)(t + ∆t)

]+O

[(∆t)6]

Page 84: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 85: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 86: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 87: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 88: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 89: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 90: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 91: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 92: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 93: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 94: Métodos Numéricos en Física

Control adaptivo de pasos.

Fijar un error relativo maximal “eps” y un paso inicial ∆t .

1 Calcular paso con ∆t dado:Calcular una solución x (opt)(t + ∆t).Calcular su estimación de error “error”.

2 Decisión sobre el paso ∆t a través de la condición:

error∣∣x (opt)(t + ∆t)∣∣ ≤ eps

Si es verdad:Usar la solución.Aumentar ∆t para el proximo paso.

Si no es verdad:Borrar la solución.Empezar de nuevo (#1) con un paso ∆t mas pequeño.

Page 95: Métodos Numéricos en Física

Adapción de pasos.¿Cómo calcular los nuevos pasos?

Vamos a definir el factor:

R =error

eps×∣∣x (opt)(t + ∆t)

∣∣R ≤ 1 para un paso aceptable y R > 1 para un paso noaceptable.El paso ideal ∆tideal hubiera producido un Rideal = 1, es decirtenemos el error maximal permisible.Para un paso ∆t la estimación del error es: error ∝ (∆t)5 yentonces

RRideal

= R =

(∆t

∆tideal

)5

Resulta el paso ideal:

∆tideal = ∆t ×(

1R

) 15

Page 96: Métodos Numéricos en Física

Adapción de pasos.¿Cómo calcular los nuevos pasos?

Vamos a definir el factor:

R =error

eps×∣∣x (opt)(t + ∆t)

∣∣R ≤ 1 para un paso aceptable y R > 1 para un paso noaceptable.El paso ideal ∆tideal hubiera producido un Rideal = 1, es decirtenemos el error maximal permisible.Para un paso ∆t la estimación del error es: error ∝ (∆t)5 yentonces

RRideal

= R =

(∆t

∆tideal

)5

Resulta el paso ideal:

∆tideal = ∆t ×(

1R

) 15

Page 97: Métodos Numéricos en Física

Adapción de pasos.¿Cómo calcular los nuevos pasos?

Vamos a definir el factor:

R =error

eps×∣∣x (opt)(t + ∆t)

∣∣R ≤ 1 para un paso aceptable y R > 1 para un paso noaceptable.El paso ideal ∆tideal hubiera producido un Rideal = 1, es decirtenemos el error maximal permisible.Para un paso ∆t la estimación del error es: error ∝ (∆t)5 yentonces

RRideal

= R =

(∆t

∆tideal

)5

Resulta el paso ideal:

∆tideal = ∆t ×(

1R

) 15

Page 98: Métodos Numéricos en Física

Adapción de pasos.¿Cómo calcular los nuevos pasos?

Vamos a definir el factor:

R =error

eps×∣∣x (opt)(t + ∆t)

∣∣R ≤ 1 para un paso aceptable y R > 1 para un paso noaceptable.El paso ideal ∆tideal hubiera producido un Rideal = 1, es decirtenemos el error maximal permisible.Para un paso ∆t la estimación del error es: error ∝ (∆t)5 yentonces

RRideal

= R =

(∆t

∆tideal

)5

Resulta el paso ideal:

∆tideal = ∆t ×(

1R

) 15

Page 99: Métodos Numéricos en Física

Regla para paso adaptivo.

Paso adaptivo para RK4 + 2× RK4/2:

∆tnew = ∆told ×(

1R

) 15

R ≤ 1: Solución es aceptable, se puede continuar con:

∆tnew = ∆told ×(

1R

) 15

≥ ∆told

R > 1: Solución no es aceptable, hay que empezar de nuevocon:

∆tnew = ∆told ×(

1R

) 15

< ∆told

Page 100: Métodos Numéricos en Física

Regla para paso adaptivo.

Paso adaptivo para RK4 + 2× RK4/2:

∆tnew = ∆told ×(

1R

) 15

R ≤ 1: Solución es aceptable, se puede continuar con:

∆tnew = ∆told ×(

1R

) 15

≥ ∆told

R > 1: Solución no es aceptable, hay que empezar de nuevocon:

∆tnew = ∆told ×(

1R

) 15

< ∆told

Page 101: Métodos Numéricos en Física

Regla para paso adaptivo.

Paso adaptivo para RK4 + 2× RK4/2:

∆tnew = ∆told ×(

1R

) 15

R ≤ 1: Solución es aceptable, se puede continuar con:

∆tnew = ∆told ×(

1R

) 15

≥ ∆told

R > 1: Solución no es aceptable, hay que empezar de nuevocon:

∆tnew = ∆told ×(

1R

) 15

< ∆told

Page 102: Métodos Numéricos en Física

Problema: Es lento!

De un xn al tiempo tn vamos a empezar a calcular:RK4 de tn hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).RK4 de tn hasta tn + ∆t

2 : 4 evaluaciones de f (x , t).RK4 de tn + ∆t

2 hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).

Son 12 evaluaciones de f (x , t).Se puede ahorar una evaluación común en el punto (xn, tn).

Problema:Se necesitan 11 evaluaciones de la función f (x , t) para un pasoadaptivo (exitoso)!

Page 103: Métodos Numéricos en Física

Problema: Es lento!

De un xn al tiempo tn vamos a empezar a calcular:RK4 de tn hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).RK4 de tn hasta tn + ∆t

2 : 4 evaluaciones de f (x , t).RK4 de tn + ∆t

2 hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).

Son 12 evaluaciones de f (x , t).Se puede ahorar una evaluación común en el punto (xn, tn).

Problema:Se necesitan 11 evaluaciones de la función f (x , t) para un pasoadaptivo (exitoso)!

Page 104: Métodos Numéricos en Física

Problema: Es lento!

De un xn al tiempo tn vamos a empezar a calcular:RK4 de tn hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).RK4 de tn hasta tn + ∆t

2 : 4 evaluaciones de f (x , t).RK4 de tn + ∆t

2 hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).

Son 12 evaluaciones de f (x , t).Se puede ahorar una evaluación común en el punto (xn, tn).

Problema:Se necesitan 11 evaluaciones de la función f (x , t) para un pasoadaptivo (exitoso)!

Page 105: Métodos Numéricos en Física

Problema: Es lento!

De un xn al tiempo tn vamos a empezar a calcular:RK4 de tn hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).RK4 de tn hasta tn + ∆t

2 : 4 evaluaciones de f (x , t).RK4 de tn + ∆t

2 hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).

Son 12 evaluaciones de f (x , t).Se puede ahorar una evaluación común en el punto (xn, tn).

Problema:Se necesitan 11 evaluaciones de la función f (x , t) para un pasoadaptivo (exitoso)!

Page 106: Métodos Numéricos en Física

Problema: Es lento!

De un xn al tiempo tn vamos a empezar a calcular:RK4 de tn hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).RK4 de tn hasta tn + ∆t

2 : 4 evaluaciones de f (x , t).RK4 de tn + ∆t

2 hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).

Son 12 evaluaciones de f (x , t).Se puede ahorar una evaluación común en el punto (xn, tn).

Problema:Se necesitan 11 evaluaciones de la función f (x , t) para un pasoadaptivo (exitoso)!

Page 107: Métodos Numéricos en Física

Problema: Es lento!

De un xn al tiempo tn vamos a empezar a calcular:RK4 de tn hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).RK4 de tn hasta tn + ∆t

2 : 4 evaluaciones de f (x , t).RK4 de tn + ∆t

2 hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).

Son 12 evaluaciones de f (x , t).Se puede ahorar una evaluación común en el punto (xn, tn).

Problema:Se necesitan 11 evaluaciones de la función f (x , t) para un pasoadaptivo (exitoso)!

Page 108: Métodos Numéricos en Física

Problema: Es lento!

De un xn al tiempo tn vamos a empezar a calcular:RK4 de tn hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).RK4 de tn hasta tn + ∆t

2 : 4 evaluaciones de f (x , t).RK4 de tn + ∆t

2 hasta tn+1 = tn + ∆t : 4 evaluaciones de f (x , t).

Son 12 evaluaciones de f (x , t).Se puede ahorar una evaluación común en el punto (xn, tn).

Problema:Se necesitan 11 evaluaciones de la función f (x , t) para un pasoadaptivo (exitoso)!

Page 109: Métodos Numéricos en Física

Runge-Kutta embedded.Idéa de Fehlberg: Comparar RK4 con RK5 en manera eficiente.

Evaluar 6 veces la función f (x , t):

k1 = ∆t f (xn, tn)k2 = ∆t f (xn + b2,1k1, tn + a2∆t)

...

k6 = ∆t f (xn +5∑

m=1

b6,mkm, tn + a6∆t)

Calcular dos soluciones:

x (5)n+1 = xn +

6∑m=1

cmkm +O[(∆t)6]

x (4)n+1 = xn +

6∑m=1

dmkm +O[(∆t)5]

Estimación del error: error = |x (5)n+1 − x (4)

n+1| ∝ (∆t)5

Page 110: Métodos Numéricos en Física

Runge-Kutta embedded.Idéa de Fehlberg: Comparar RK4 con RK5 en manera eficiente.

Evaluar 6 veces la función f (x , t):

k1 = ∆t f (xn, tn)k2 = ∆t f (xn + b2,1k1, tn + a2∆t)

...

k6 = ∆t f (xn +5∑

m=1

b6,mkm, tn + a6∆t)

Calcular dos soluciones:

x (5)n+1 = xn +

6∑m=1

cmkm +O[(∆t)6]

x (4)n+1 = xn +

6∑m=1

dmkm +O[(∆t)5]

Estimación del error: error = |x (5)n+1 − x (4)

n+1| ∝ (∆t)5

Page 111: Métodos Numéricos en Física

Runge-Kutta embedded.Idéa de Fehlberg: Comparar RK4 con RK5 en manera eficiente.

Evaluar 6 veces la función f (x , t):

k1 = ∆t f (xn, tn)k2 = ∆t f (xn + b2,1k1, tn + a2∆t)

...

k6 = ∆t f (xn +5∑

m=1

b6,mkm, tn + a6∆t)

Calcular dos soluciones:

x (5)n+1 = xn +

6∑m=1

cmkm +O[(∆t)6]

x (4)n+1 = xn +

6∑m=1

dmkm +O[(∆t)5]

Estimación del error: error = |x (5)n+1 − x (4)

n+1| ∝ (∆t)5

Page 112: Métodos Numéricos en Física

Coeficientes de Cash-Karp.

~a =

1531035178

,~~b =

15 340

940

310 − 9

1065

− 1154

52 − 70

273527

163155296

175512

57513824

44275110592

2534096

~c =

373780

2506211255940

5121771

, ~d =

282527648

018575483841352555296

27714336

14

Page 113: Métodos Numéricos en Física

Implementación.de_rkembedded.c

1 /*! \file de_rkembedded.c */2 #include <math.h>3 #include <float.h>4 #include <stdlib.h>5 #include <complex.h>6 /* Cash-Karp constants: */7 static const double a2 = 0.2, a3 = 0.3, a4 = 0.6,8 a5 = 1.0, a6 = 0.875;9 static const double b21 = 0.2, b31 = 3.0/40.0,

10 b32 = 9.0/40.0, b41 = 0.3, b42 = -0.9, b43 = 1.2,11 b51 = -11.0/54.0, b52=2.5, b53 = -70.0/27.0,12 b54 = 35.0/27.0, b61 = 1631.0/55296.0,13 b62 = 175.0/512.0, b63 = 575.0/13824.0,14 b64 = 44275.0/110592.0, b65 = 253.0/4096.0;15 static const double c1 = 37.0/378.0, c3 = 250.0/621.0,16 c4 = 125.0/594.0, c6 = 512.0/1771.0;17 static const double dc1 = 37.0/378.0 - 2825.0/27648.0,18 dc3 = 250.0/621.0 - 18575.0/48384.0,19 dc4 = 125.0/594.0 - 13525.0/55296.0,20 dc5 = -277.0/14336.0,21 dc6 = 512.0/1771.0 - 0.25;

Page 114: Métodos Numéricos en Física

Implementación.de_rkembedded.c

23 /*! Given values for sz variables x[0..sz-1] known at x,24 use the fifth-order Cash-Karp Runge-Kutta method to25 advance the solution over an interval dt and return26 the incremented variables as xout[0..sz-1]. Also return27 an estimate of the maximal relative error in xout using28 the embedded fourth-order method. The user supplies29 the routine f(dxdt, x, t), which returns derivatives30 dx/dt at t. */31 double rk_embedded(double *x, double t, size_t sz, double dt,32 double *xout,33 void (*f)(double*, double*, double))34 35 int i;36 double *k1, *k2, *k3, *k4, *k5, *k6;37 double err_max, err_tmp;38

39 k1 = malloc(sz * sizeof(double));40 k2 = malloc(sz * sizeof(double));41 k3 = malloc(sz * sizeof(double));42 k4 = malloc(sz * sizeof(double));43 k5 = malloc(sz * sizeof(double));44 k6 = malloc(sz * sizeof(double));

Page 115: Métodos Numéricos en Física

Implementación.de_rkembedded.c

46 f(k1, x, t);47

48 for (i = 0; i < sz; i++)49 xout[i] = x[i] + b21 * dt * k1[i];50 f(k2, xout, t + a2 * dt);51

52 for (i = 0; i < sz; i++)53 xout[i] = x[i] + dt * (b31 * k1[i] + b32 * k2[i]);54 f(k3, xout, t + a3 * dt);55

56 for (i = 0; i < sz; i++)57 xout[i] = x[i] + dt * (b41 * k1[i] + b42 * k2[i]58 + b43 * k3[i]);59 f(k4, xout, t + a4 * dt);60

61 for (i = 0; i < sz; i++)62 xout[i] = x[i] + dt * (b51 * k1[i] + b52 * k2[i]63 + b53 * k3[i] + b54 * k4[i]);64 f(k5, xout, t + a5 * dt);

Page 116: Métodos Numéricos en Física

Implementación.de_rkembedded.c

66 for (i = 0; i < sz; i++)67 xout[i] = x[i] + dt * (b61 * k1[i] + b62 * k2[i]68 + b63 * k3[i] + b64 * k4[i] + b65 * k5[i]);69 f(k6, xout, t + a6 * dt);70

71 err_max = 0.0;72 for (i = 0; i < sz; i++) 73 xout[i] = x[i] + dt * (c1 * k1[i] + c3 * k3[i]74 + c4 * k4[i] + c6 * k6[i]);75 err_tmp = fabs(dt * (dc1 * k1[i] + dc3 * k3[i]76 + dc4 * k4[i] + dc5 * k5[i] + dc6 * k6[i]))77 / (fabs(xout[i]) + DBL_MIN);78 err_max = (err_max > err_tmp) ? err_max : err_tmp;79 80

81 free(k1);82 free(k2);83 free(k3);84 free(k4);85 free(k5);86 free(k6);87 return err_max;88

Page 117: Métodos Numéricos en Física

Implementación.de_rkembedded.c

91 /*! Given values for sz variables x[0..sz-1] known at x,92 use the fifth-order Cash-Karp Runge-Kutta method to93 advance the solution over an interval dt and return94 the incremented variables as xout[0..sz-1]. Also return95 an estimate of the maximal relative error in xout using96 the embedded fourth-order method. The user supplies97 the routine f(dxdt, x, t), which returns derivatives98 dx/dt at t. Complex version. */99 double rk_embedded_cpx(complex double *x, double t, size_t sz,

100 double dt, complex double *xout,101 void (*f)(complex double*, complex double*, double))102 103 int i;104 complex double *k1, *k2, *k3, *k4, *k5, *k6;105 double err_max, err_tmp;106

107 k1 = malloc(sz * sizeof(complex double));108 k2 = malloc(sz * sizeof(complex double));109 k3 = malloc(sz * sizeof(complex double));110 k4 = malloc(sz * sizeof(complex double));111 k5 = malloc(sz * sizeof(complex double));112 k6 = malloc(sz * sizeof(complex double));

Page 118: Métodos Numéricos en Física

Implementación.de_rkembedded.c

114 f(k1, x, t);115

116 for (i = 0; i < sz; i++)117 xout[i] = x[i] + b21 * dt * k1[i];118 f(k2, xout, t + a2 * dt);119

120 for (i = 0; i < sz; i++)121 xout[i] = x[i] + dt * (b31 * k1[i] + b32 * k2[i]);122 f(k3, xout, t + a3 * dt);123

124 for (i = 0; i < sz; i++)125 xout[i] = x[i] + dt * (b41 * k1[i] + b42 * k2[i]126 + b43 * k3[i]);127 f(k4, xout, t + a4 * dt);128

129 for (i = 0; i < sz; i++)130 xout[i] = x[i] + dt * (b51 * k1[i] + b52 * k2[i]131 + b53 * k3[i] + b54 * k4[i]);132 f(k5, xout, t + a5 * dt);

Page 119: Métodos Numéricos en Física

Implementación.de_rkembedded.c

134 for (i = 0; i < sz; i++)135 xout[i] = x[i] + dt * (b61 * k1[i] + b62 * k2[i]136 + b63 * k3[i] + b64 * k4[i] + b65 * k5[i]);137 f(k6, xout, t + a6 * dt);138

139 err_max = 0.0;140 for (i = 0; i < sz; i++) 141 xout[i] = x[i] + dt * (c1 * k1[i] + c3 * k3[i]142 + c4 * k4[i] + c6 * k6[i]);143 err_tmp = cabs(dt * (dc1 * k1[i] + dc3 * k3[i]144 + dc4 * k4[i] + dc5 * k5[i] + dc6 * k6[i]))145 / (cabs(xout[i]) + DBL_MIN);146 err_max = (err_max > err_tmp) ? err_max : err_tmp;147 148

149 free(k1);150 free(k2);151 free(k3);152 free(k4);153 free(k5);154 free(k6);155 return err_max;156

Page 120: Métodos Numéricos en Física

Implementación del control adaptivo.de_solve.c

1 /*! \file de_solve.c */2

3 #include <stdlib.h>4 #include <assert.h>5 #include <math.h>6 #include <float.h>7 #include <complex.h>8

9 #define SAFETY_FACTOR 0.910

11 /*! Solves an ODE using adaptive stepsizes with the embedded RK12 method. Integrate starting values y[0..sz-1] from t1 to t213 with (relative) accuracy eps. dtmin is the minimum allowed14 stepsize (can be zero). y[..] is replaced by values at the15 end of the integration interval. "f()" is the user-supplied16 routine for calculating the right-hand side derivative. */17 int de_solve(double *y, size_t sz, double t1, double t2,18 double eps, double dtmin,19 void (*f)(double*, double*, double))20 21 double rk_embedded(double*, double, size_t, double, double*,22 void (*)(double*, double*, double));

Page 121: Métodos Numéricos en Física

Implementación del control adaptivo.de_solve.c

23 size_t i;24 double t, dt, err, *ytmp;25 int min_cnt;26

27 dt = t2 - t1;28 assert((dtmin >= 0.0) && (dt >= dtmin));29 ytmp = malloc(sz * sizeof(double));30 t = t1;31 min_cnt = 0;

Page 122: Métodos Numéricos en Física

Implementación del control adaptivo.de_solve.c

33 do 34 for(;;) 35 dt = ((t+dt) > t2) ? t2-t : dt;36 err = rk_embedded(y, t, sz, dt, ytmp, f);37 err /= eps;38 if (err > 1.0) 39 dt *= SAFETY_FACTOR * pow(err, -0.2);40 if (dt < dtmin) 41 min_cnt++;42 dt = dtmin;43 44 else 45 t += dt;46 dt *= SAFETY_FACTOR * pow(err, -0.2);47 for (i = 0; i < sz; i++)48 y[i] = ytmp[i];49 break;50 51 52 while ((t2-t) > DBL_MIN);53 free(ytmp);54 return min_cnt;55

Page 123: Métodos Numéricos en Física

Implementación del control adaptivo.de_solve.c

57 /*! Solves an ODE using adaptive stepsizes with the embedded RK58 method. Integrate starting values y[0..sz-1] from t1 to t259 with (relative) accuracy eps. dtmin is the minimum allowed60 stepsize (can be zero). y[..] is replaced by values at the61 end of the integration interval. "f()" is the user-supplied62 routine for calculating the right-hand side derivative.63 Complex version. */64 int de_solve_cpx(complex double *y, size_t sz, double t1,65 double t2, double eps, double dtmin,66 void (*f)(complex double*, complex double*,67 double))68 69 double rk_embedded_cpx(complex double*, double, size_t,70 double, complex double*,71 void (*)(complex double*, complex double*, double));72 size_t i;73 double t, dt, err;74 complex double *ytmp;75 int min_cnt;

Page 124: Métodos Numéricos en Física

2 osciladores armónicos acoplados.

m2

m1

ω2, γ2

ω1, γ1

k12

Ecuaciones de movimiento:

dp1

dt= m1

d2x1

dt2 = −k1x1 −m1γ1x1 + k12x2

dp2

dt= m2

d2x2

dt2 = −k2x2 −m2γ2x2 + k12x1

Page 125: Métodos Numéricos en Física

Tiempo sin unidad.

1 Las frecuencies de los osciladores (sin relajación) son

ωi =√

ki/mi = [rad/s] (i = 1,2)

2 Usamos la frecuencia ω0 ≈ ω1, ω2, γ1, γ2 como referencia paradefinir un tiempo sin dimension:

τ = ω0t = [rad]

3 Las ecuaciones de movimiento salen como (x = dx/dτ):

x1 = −ω′21 x1 − γ′1x1 + κ′1x2

x2 = −ω′22 x2 − γ′2x2 + κ′2x1

donde: ω′i = ωi/ω0, γ′i = γi/ω0 y κ′i = (Ωi/ω0)2 con Ωi =

√k12/mi .

Page 126: Métodos Numéricos en Física

Tiempo sin unidad.

1 Las frecuencies de los osciladores (sin relajación) son

ωi =√

ki/mi = [rad/s] (i = 1,2)

2 Usamos la frecuencia ω0 ≈ ω1, ω2, γ1, γ2 como referencia paradefinir un tiempo sin dimension:

τ = ω0t = [rad]

3 Las ecuaciones de movimiento salen como (x = dx/dτ):

x1 = −ω′21 x1 − γ′1x1 + κ′1x2

x2 = −ω′22 x2 − γ′2x2 + κ′2x1

donde: ω′i = ωi/ω0, γ′i = γi/ω0 y κ′i = (Ωi/ω0)2 con Ωi =

√k12/mi .

Page 127: Métodos Numéricos en Física

Tiempo sin unidad.

1 Las frecuencies de los osciladores (sin relajación) son

ωi =√

ki/mi = [rad/s] (i = 1,2)

2 Usamos la frecuencia ω0 ≈ ω1, ω2, γ1, γ2 como referencia paradefinir un tiempo sin dimension:

τ = ω0t = [rad]

3 Las ecuaciones de movimiento salen como (x = dx/dτ):

x1 = −ω′21 x1 − γ′1x1 + κ′1x2

x2 = −ω′22 x2 − γ′2x2 + κ′2x1

donde: ω′i = ωi/ω0, γ′i = γi/ω0 y κ′i = (Ωi/ω0)2 con Ωi =

√k12/mi .

Page 128: Métodos Numéricos en Física

Posición sin dimension.

1 Usamos una unidad de posición ∆x0:

xi = ∆x0qi (i = 1,2)

2 Salen ecuaciones de movimiento:

q1 = −ω′21 q1 − γ′1q1 + κ′1q2

q2 = −ω′22 q2 − γ′2q2 + κ′2q1

Page 129: Métodos Numéricos en Física

Posición sin dimension.

1 Usamos una unidad de posición ∆x0:

xi = ∆x0qi (i = 1,2)

2 Salen ecuaciones de movimiento:

q1 = −ω′21 q1 − γ′1q1 + κ′1q2

q2 = −ω′22 q2 − γ′2q2 + κ′2q1

Page 130: Métodos Numéricos en Física

Ecuación diferencial del orden 1.

Definimos ki = qi entonces sale sistema de ecuacionesdiferenciales:

q1

k1q2

k2

=

0 1 0 0

−ω′21 −γ′1 κ′1 00 0 0 1κ′2 0 −ω′22 −γ′2

·

q1k1q2k2

Con valores iniciales:

q1(t)k1(t)q2(t)k2(t)

t=0

=

q1(0)q2(0)q2(0)q2(0)

Page 131: Métodos Numéricos en Física

Ecuación diferencial del orden 1.

Definimos ki = qi entonces sale sistema de ecuacionesdiferenciales:

q1

k1q2

k2

=

0 1 0 0

−ω′21 −γ′1 κ′1 00 0 0 1κ′2 0 −ω′22 −γ′2

·

q1k1q2k2

Con valores iniciales:

q1(t)k1(t)q2(t)k2(t)

t=0

=

q1(0)q2(0)q2(0)q2(0)

Page 132: Métodos Numéricos en Física

Implementación.main_de_cho2.c

1 #include <stdlib.h>2 #include <stdio.h>3 #include <math.h>4

5 #define SZ 46 #define GAMMA1 0.17 #define OMEGA1 1.08 #define X_INI1 1.09 #define P_INI1 0.0

10 #define GAMMA2 0.111 #define OMEGA2 8.012 #define X_INI2 1.013 #define P_INI2 0.014 #define KAPPA1 1.015 #define KAPPA2 0.0516 #define OMEGA1SQR (OMEGA1 * OMEGA1)17 #define OMEGA2SQR (OMEGA2 * OMEGA2)

Page 133: Métodos Numéricos en Física

Implementación.main_de_cho2.c

19 int de_solve(double*, size_t, double, double, double, double,20 void (*)(double*, double*, double));21

22 void f(double *dxdt, double *x, double t)23 24 /* 2 coupled, damped harmonic oscillators */25 dxdt[0] = x[1];26 dxdt[1] = - OMEGA1SQR * x[0] - GAMMA1 * x[1] + KAPPA1 * x[2];27 dxdt[2] = x[3];28 dxdt[3] = KAPPA2 * x[0] - OMEGA2SQR * x[2] - GAMMA2 * x[3];29

Page 134: Métodos Numéricos en Física

Implementación.main_de_cho2.c

31 int main(void)32 33 double x[SZ];34 double t, tmax, tstep;35 int min_cnt;36

37 tmax = 40.0;38 tstep = 0.01;39

40 x[0] = X_INI1;41 x[1] = P_INI1;42 x[2] = X_INI2;43 x[3] = P_INI2;44

45 for (t = 0; t < tmax; t += tstep) 46 printf("%f %f %f %f %f\n", t, x[0], x[1], x[2], x[3]);47 min_cnt = de_solve(x, SZ, t, t+tstep, 1.0e-7, 1.0e-10, f);48 if (min_cnt != 0)49 fprintf(stderr, "at t = %f - # of events h < hmin: %d\n",50 t, min_cnt);51 52 return 0;53

Page 135: Métodos Numéricos en Física

Resultados.

−1.2

−1

−0.8

−0.6

−0.4

−0.2

0

0.2

0.4

0.6

0.8

1

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1

k 1

q1

Oscilador 1

Page 136: Métodos Numéricos en Física

Resultados.

−8

−6

−4

−2

0

2

4

6

8

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1q2

k 2

Oscilador 2

Page 137: Métodos Numéricos en Física

Molecula en campo eléctrico.

y

ϑ

ϕ

z

x

E

Page 138: Métodos Numéricos en Física

Ecuaciones de movimiento.

Energía potencial en el campo eléctrico E :

V (ϑ) = −dE cosϑ− E2∆α

2cos2 ϑ

donde d = momento dipolar eléctrico permanente,∆α = α‖ − α⊥ =polarisabilidad anisotropica.Constante de movimiento (Θ = momento inercial):

Lz = Θdϕdt

sin2 ϑ

Ecuación de movimiento (conservación de energía):

Θd2ϑ

dt2 −L2

z

Θcotϑ+

∂V (ϑ)

∂ϑ= 0

Page 139: Métodos Numéricos en Física

Ecuaciones de movimiento.

Energía potencial en el campo eléctrico E :

V (ϑ) = −dE cosϑ− E2∆α

2cos2 ϑ

donde d = momento dipolar eléctrico permanente,∆α = α‖ − α⊥ =polarisabilidad anisotropica.Constante de movimiento (Θ = momento inercial):

Lz = Θdϕdt

sin2 ϑ

Ecuación de movimiento (conservación de energía):

Θd2ϑ

dt2 −L2

z

Θcotϑ+

∂V (ϑ)

∂ϑ= 0

Page 140: Métodos Numéricos en Física

Ecuaciones de movimiento.

Energía potencial en el campo eléctrico E :

V (ϑ) = −dE cosϑ− E2∆α

2cos2 ϑ

donde d = momento dipolar eléctrico permanente,∆α = α‖ − α⊥ =polarisabilidad anisotropica.Constante de movimiento (Θ = momento inercial):

Lz = Θdϕdt

sin2 ϑ

Ecuación de movimiento (conservación de energía):

Θd2ϑ

dt2 −L2

z

Θcotϑ+

∂V (ϑ)

∂ϑ= 0

Page 141: Métodos Numéricos en Física

Tiempo sin dimensión.

1 Usamos τ = ω0t con alguna frecuencia ω0:

Lz = Θω0dϕdτ

sin2 ϑ = Θω0ϕ sin2 ϑ

2 Definimos una constante

a =Lz

Θω0= ϕ(0) sin2 ϑ(0)

Entonces la ecuación diferencial para ϕ es:

ϕ =a

sin2 ϑ

3 La ecuación diferencial para ϑ sale como:

ϑ = a2 cotϑ− b1 sinϑ− b2 cosϑ sinϑ

donde: b1 = dE/(Θω20), b2 = ∆αE2/(Θω2

0).

Page 142: Métodos Numéricos en Física

Tiempo sin dimensión.

1 Usamos τ = ω0t con alguna frecuencia ω0:

Lz = Θω0dϕdτ

sin2 ϑ = Θω0ϕ sin2 ϑ

2 Definimos una constante

a =Lz

Θω0= ϕ(0) sin2 ϑ(0)

Entonces la ecuación diferencial para ϕ es:

ϕ =a

sin2 ϑ

3 La ecuación diferencial para ϑ sale como:

ϑ = a2 cotϑ− b1 sinϑ− b2 cosϑ sinϑ

donde: b1 = dE/(Θω20), b2 = ∆αE2/(Θω2

0).

Page 143: Métodos Numéricos en Física

Tiempo sin dimensión.

1 Usamos τ = ω0t con alguna frecuencia ω0:

Lz = Θω0dϕdτ

sin2 ϑ = Θω0ϕ sin2 ϑ

2 Definimos una constante

a =Lz

Θω0= ϕ(0) sin2 ϑ(0)

Entonces la ecuación diferencial para ϕ es:

ϕ =a

sin2 ϑ

3 La ecuación diferencial para ϑ sale como:

ϑ = a2 cotϑ− b1 sinϑ− b2 cosϑ sinϑ

donde: b1 = dE/(Θω20), b2 = ∆αE2/(Θω2

0).

Page 144: Métodos Numéricos en Física

Molecula homonuclear.Ejemplos: Rb2, N2, K2, etc.

No hay dípolo eléctrico permanente d = 0!Ecuaciones diferenciales:

ϕ(τ) = a sin−2[ϑ(τ)]

ϑ(τ) = κ(τ)

κ(τ) = a2 cot[ϑ(τ)]− b cos[ϑ(τ)] sin[ϑ(τ)]

donde [ω0 = Lz/(Θa)]:

b = b2 =∆αE2

Θω20

= a2 ∆αE2

L2z/Θ

= a2(

erg.potencialerg.cinetica

)Condiciones iniciales: Dado ϕ(0), ϕ(0), ϑ(0), ϑ(0) se puedeobtener

a = ϕ(0) sin2[ϑ(0)]

Queda solo un parametro libre: b = a2 × razn.

Page 145: Métodos Numéricos en Física

Molecula homonuclear.Ejemplos: Rb2, N2, K2, etc.

No hay dípolo eléctrico permanente d = 0!Ecuaciones diferenciales:

ϕ(τ) = a sin−2[ϑ(τ)]

ϑ(τ) = κ(τ)

κ(τ) = a2 cot[ϑ(τ)]− b cos[ϑ(τ)] sin[ϑ(τ)]

donde [ω0 = Lz/(Θa)]:

b = b2 =∆αE2

Θω20

= a2 ∆αE2

L2z/Θ

= a2(

erg.potencialerg.cinetica

)Condiciones iniciales: Dado ϕ(0), ϕ(0), ϑ(0), ϑ(0) se puedeobtener

a = ϕ(0) sin2[ϑ(0)]

Queda solo un parametro libre: b = a2 × razn.

Page 146: Métodos Numéricos en Física

Molecula homonuclear.Ejemplos: Rb2, N2, K2, etc.

No hay dípolo eléctrico permanente d = 0!Ecuaciones diferenciales:

ϕ(τ) = a sin−2[ϑ(τ)]

ϑ(τ) = κ(τ)

κ(τ) = a2 cot[ϑ(τ)]− b cos[ϑ(τ)] sin[ϑ(τ)]

donde [ω0 = Lz/(Θa)]:

b = b2 =∆αE2

Θω20

= a2 ∆αE2

L2z/Θ

= a2(

erg.potencialerg.cinetica

)Condiciones iniciales: Dado ϕ(0), ϕ(0), ϑ(0), ϑ(0) se puedeobtener

a = ϕ(0) sin2[ϑ(0)]

Queda solo un parametro libre: b = a2 × razn.

Page 147: Métodos Numéricos en Física

Visualisación.¿Qué vamos a graficar?

1 La dirección de la eje de la molecula:

~r(τ) =

cosϕ sinϑsinϕ sinϑ

cosϑ

2 El momento angular:

~l(τ) =~L(τ)

Θω0=

ϑ cosϕ− ϕ sinϑ cosϑ sinϕϑ sinϕ+ ϕ sinϑ cosϑ cosϕ

ϕ sin2 ϑ

=

ϑ cosϕ− a cotϑ sinϕϑ sinϕ+ a cotϑ cosϕ

a

Page 148: Métodos Numéricos en Física

Visualisación.¿Qué vamos a graficar?

1 La dirección de la eje de la molecula:

~r(τ) =

cosϕ sinϑsinϕ sinϑ

cosϑ

2 El momento angular:

~l(τ) =~L(τ)

Θω0=

ϑ cosϕ− ϕ sinϑ cosϑ sinϕϑ sinϕ+ ϕ sinϑ cosϑ cosϕ

ϕ sin2 ϑ

=

ϑ cosϕ− a cotϑ sinϕϑ sinϕ+ a cotϑ cosϕ

a

Page 149: Métodos Numéricos en Física

Implementación.main_de_mol.c

1 #define _XOPEN_SOURCE 5002 #define _ISOC99_SOURCE3

4 #include <stdlib.h>5 #include <stdio.h>6 #include <math.h>7

8 #define THETA_INI M_PI/1.59 #define THETADOT_INI 0.2

10 #define PHI_INI 0.011 #define PHIDOT_INI M_PI/20.012 #define A (PHIDOT_INI * sin(THETA_INI) * sin(THETA_INI))13 #define BFUNC(x) (A * A * (x))14

15 double V_T; /* potencial over L_z kinetic erg. */16 double B;17

18 int de_solve(double*, size_t, double, double, double, double,19 void (*)(double*, double*, double));

Page 150: Métodos Numéricos en Física

Implementación.main_de_mol.c

21 void f(double *dxdt, double *x, double t)22 23 double ss, cs;24

25 /* Polarisable homonuclear diatomic molecule with applied26 linearly polarized electric field:27 x[0] = phi, x[1] = theta, x[2] = k */28 ss = sin(x[1]);29 cs = cos(x[1]) * ss;30 ss *= ss;31 dxdt[0] = A / ss;32 dxdt[1] = x[2];33 dxdt[2] = cs * (A * dxdt[0] - B);34 35

36 void orientation(double *r, double *x)37 /* x[0] = phi, x[1] = theta, x[2] = k */38 r[2] = sin(x[1]);39 r[0] = cos(x[0]) * r[2];40 r[1] = sin(x[0]) * r[2];41 r[2] = cos(x[1]);42

Page 151: Métodos Numéricos en Física

Implementación.main_de_mol.c

44 void angular_momentum(double *L, double *x)45 /* x[0] = phi, x[1] = theta, x[2] = k */46 double cottheta;47 double sphi, cphi;48

49 cottheta = 1.0 / tan(x[1]);50 sphi = sin(x[0]);51 cphi = cos(x[0]);52

53 L[0] = x[2] * cphi - A * sphi * cottheta;54 L[1] = x[2] * sphi + A * cphi * cottheta;55 L[2] = A;56

Page 152: Métodos Numéricos en Física

Implementación.main_de_mol.c

58 int main(void)59 60 double x[3];61 double r[3], L[3];62 double t, tmax, tstep;63 int min_cnt;64

65 tmax = 30.0;66 tstep = 0.001;67

68 x[0] = PHI_INI;69 x[1] = THETA_INI;70 x[2] = THETADOT_INI;71 V_T = 0.0;72 B = BFUNC(V_T);73

74 printf("0.0 0.0 0.0 0.0 0.0 0.0 0.0\n\n\n");75

76 orientation(r, x);77 angular_momentum(L, x);78 printf("0.0 %f %f %f %f %f %f\n\n\n",79 r[0], r[1], r[2],80 L[0], L[1], L[3]);

Page 153: Métodos Numéricos en Física

Implementación.main_de_mol.c

82 for (t = 0; t < tmax; t += tstep) 83 orientation(r, x);84 angular_momentum(L, x);85 printf("%f %f %f %f %f %f %f\n", t,86 r[0], r[1], r[2],87 L[0], L[1], L[3]);88 min_cnt = de_solve(x, 3, t, t+tstep, 1.0e-7, 1.0e-10, f);89 if (min_cnt != 0)90 fprintf(stderr, "at t = %f - # of events h < hmin: %d\n",91 t, min_cnt);92 93 printf("\n\n");94

95 x[0] = PHI_INI;96 x[1] = THETA_INI;97 x[2] = THETADOT_INI;98 V_T = 0.2;99 B = BFUNC(V_T);

Page 154: Métodos Numéricos en Física

Implementación.main_de_mol.c

101 for (t = 0; t < tmax; t += tstep) 102 orientation(r, x);103 angular_momentum(L, x);104 printf("%f %f %f %f %f %f %f\n", t,105 r[0], r[1], r[2],106 L[0], L[1], L[3]);107 min_cnt = de_solve(x, 3, t, t+tstep, 1.0e-7, 1.0e-10, f);108 if (min_cnt != 0)109 fprintf(stderr, "at t = %f - # of events h < hmin: %d\n",110 t, min_cnt);111 112

113 return 0;114

Page 155: Métodos Numéricos en Física

Resultados.

−0.4 −0.2 0 0.2 0.4 0.6 0.8 1−0.6−0.4

−0.2 0

0.2 0.4

0.6 0.8

1−1

−0.8−0.6−0.4−0.2

0 0.2 0.4 0.6 0.8

1

−0.4 −0.2 0 0.2 0.4 0.6 0.8 1−0.6−0.4

−0.2 0

0.2 0.4

0.6 0.8

1−1

−0.8−0.6−0.4−0.2

0 0.2 0.4 0.6 0.8

1

−0.4 −0.2 0 0.2 0.4 0.6 0.8 1−0.6−0.4

−0.2 0

0.2 0.4

0.6 0.8

1−1

−0.8−0.6−0.4−0.2

0 0.2 0.4 0.6 0.8

1

−0.4 −0.2 0 0.2 0.4 0.6 0.8 1−0.6−0.4

−0.2 0

0.2 0.4

0.6 0.8

1−1

−0.8−0.6−0.4−0.2

0 0.2 0.4 0.6 0.8

1

−0.4 −0.2 0 0.2 0.4 0.6 0.8 1−0.6−0.4

−0.2 0

0.2 0.4

0.6 0.8

1−1

−0.8−0.6−0.4−0.2

0 0.2 0.4 0.6 0.8

1

r3

r1

r2

Page 156: Métodos Numéricos en Física

Resultados.

−0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6−0.8−0.6

−0.4−0.2

0 0.2

0.4 0.6

−1

−0.5

0

0.5

1

−0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6−0.8−0.6

−0.4−0.2

0 0.2

0.4 0.6

−1

−0.5

0

0.5

1

−0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6−0.8−0.6

−0.4−0.2

0 0.2

0.4 0.6

−1

−0.5

0

0.5

1

−0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6−0.8−0.6

−0.4−0.2

0 0.2

0.4 0.6

−1

−0.5

0

0.5

1

−0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6−0.8−0.6

−0.4−0.2

0 0.2

0.4 0.6

−1

−0.5

0

0.5

1

−0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6−0.8−0.6

−0.4−0.2

0 0.2

0.4 0.6

−1

−0.5

0

0.5

1

l3

l1

l2

Page 157: Métodos Numéricos en Física

Constantes predefinidas.

Estandard X/Open (Unificacion de UNIX: BSD, SVID etc):

A través de la biblioteca matemática existen constantes predefinidas:

#define _XOPEN_SOURCE 500#define _ISOC99_SOURCE

#include <math.h>

Ahora se puede usar: M_PI, M_SQRT2 etc.

Page 158: Métodos Numéricos en Física

Ecuación de onda en 2D.z

y

x

Ecuación de movimiento para una membrana:(∂2

x + ∂2y −

1c2 ∂

2t

)z(x , y , t) = 0

donde c2 = τ/σ, τ = es tensión, σ = densidad de masa, ∂x = ∂/∂x .Oscilación: z(x , y , t) ∝ cos(ωt + α), entonces z = −ω2z, sale laecuación de Helmholtz:(

∂2x + ∂2

y + k2) z(x , y) = 0, k = ω/c

Es ecuación diferencial del orden 2 parcial.

Page 159: Métodos Numéricos en Física

Ecuación de onda en 2D.z

y

x

Ecuación de movimiento para una membrana:(∂2

x + ∂2y −

1c2 ∂

2t

)z(x , y , t) = 0

donde c2 = τ/σ, τ = es tensión, σ = densidad de masa, ∂x = ∂/∂x .Oscilación: z(x , y , t) ∝ cos(ωt + α), entonces z = −ω2z, sale laecuación de Helmholtz:(

∂2x + ∂2

y + k2) z(x , y) = 0, k = ω/c

Es ecuación diferencial del orden 2 parcial.

Page 160: Métodos Numéricos en Física

Dos posibilidades.

Todo depende de las condiciones de borde, es decir, de la geometriadel problema:

En caso general:Algorítmos especiales para ecuaciones diferenciales parcialescon condiciones de borde.No es contenido de este curso.En caso de condiciones de borde “buenas”:Expansión en un sístema otronormal de auto-soluciones de unproblema similar y después Runge-Kutta para los coeficientes.Eso si, se puede hacer!

Page 161: Métodos Numéricos en Física

Dos posibilidades.

Todo depende de las condiciones de borde, es decir, de la geometriadel problema:

En caso general:Algorítmos especiales para ecuaciones diferenciales parcialescon condiciones de borde.No es contenido de este curso.En caso de condiciones de borde “buenas”:Expansión en un sístema otronormal de auto-soluciones de unproblema similar y después Runge-Kutta para los coeficientes.Eso si, se puede hacer!

Page 162: Métodos Numéricos en Física

Dos posibilidades.

Todo depende de las condiciones de borde, es decir, de la geometriadel problema:

En caso general:Algorítmos especiales para ecuaciones diferenciales parcialescon condiciones de borde.No es contenido de este curso.En caso de condiciones de borde “buenas”:Expansión en un sístema otronormal de auto-soluciones de unproblema similar y después Runge-Kutta para los coeficientes.Eso si, se puede hacer!

Page 163: Métodos Numéricos en Física

Membrana circular.z

y

x

r0

En coordenadas polares (r , ϕ) la ecuación de Helmholtz es:(1r∂r r∂r +

1r2 ∂

2ϕ + k2

)z(r , ϕ) = 0

con las condiciones de borde: z(r0, ϕ) = 0 y ∂ϕz(r0, ϕ) = 0.Se obtienen auto-valores kλ y auto-soluciones ζλ(r , ϕ), loscuales forman un conjunto de funciones ortonormales ycompletos. La solución general será:

z(r , ϕ, t) =∑λ

zλ cos(ωλt + α)ζλ(r , ϕ)

Page 164: Métodos Numéricos en Física

Membrana circular.z

y

x

r0

En coordenadas polares (r , ϕ) la ecuación de Helmholtz es:(1r∂r r∂r +

1r2 ∂

2ϕ + k2

)z(r , ϕ) = 0

con las condiciones de borde: z(r0, ϕ) = 0 y ∂ϕz(r0, ϕ) = 0.Se obtienen auto-valores kλ y auto-soluciones ζλ(r , ϕ), loscuales forman un conjunto de funciones ortonormales ycompletos. La solución general será:

z(r , ϕ, t) =∑λ

zλ cos(ωλt + α)ζλ(r , ϕ)

Page 165: Métodos Numéricos en Física

Solución analítica.Separación de variables.

Usamos el Ansatz z(r , ϕ) = R(r)Φ(ϕ) con lo cual resulta:

R′′Φ +1r

R′Φ +1r2 RΦ′′ + k2RΦ = 0

Dividir por RΦ y multiplicar por r2 produce:

−Φ′′

Φ= k2r2 + r

R′

R+ r2 R′′

R→ m2 = const

Entonces Φ′′ = −m2Φ y su solución es:

Φ(ϕ) ∝ e±imϕ, m ∈ Z (2π − periodico)

Resulta la ecuación de Bessel:

r2R′′ + rR′ + (k2r2 −m2)R = 0

cuyos soluciones son las funciones de Bessel Jm(kr) y Nm(kr).Pero: como l«ımr→0 |Nm(kr)| = ∞ solamente se usa Jm(kr):

R(r) = Jm(kr)

Page 166: Métodos Numéricos en Física

Solución analítica.Separación de variables.

Usamos el Ansatz z(r , ϕ) = R(r)Φ(ϕ) con lo cual resulta:

R′′Φ +1r

R′Φ +1r2 RΦ′′ + k2RΦ = 0

Dividir por RΦ y multiplicar por r2 produce:

−Φ′′

Φ= k2r2 + r

R′

R+ r2 R′′

R→ m2 = const

Entonces Φ′′ = −m2Φ y su solución es:

Φ(ϕ) ∝ e±imϕ, m ∈ Z (2π − periodico)

Resulta la ecuación de Bessel:

r2R′′ + rR′ + (k2r2 −m2)R = 0

cuyos soluciones son las funciones de Bessel Jm(kr) y Nm(kr).Pero: como l«ımr→0 |Nm(kr)| = ∞ solamente se usa Jm(kr):

R(r) = Jm(kr)

Page 167: Métodos Numéricos en Física

Solución analítica.Separación de variables.

Usamos el Ansatz z(r , ϕ) = R(r)Φ(ϕ) con lo cual resulta:

R′′Φ +1r

R′Φ +1r2 RΦ′′ + k2RΦ = 0

Dividir por RΦ y multiplicar por r2 produce:

−Φ′′

Φ= k2r2 + r

R′

R+ r2 R′′

R→ m2 = const

Entonces Φ′′ = −m2Φ y su solución es:

Φ(ϕ) ∝ e±imϕ, m ∈ Z (2π − periodico)

Resulta la ecuación de Bessel:

r2R′′ + rR′ + (k2r2 −m2)R = 0

cuyos soluciones son las funciones de Bessel Jm(kr) y Nm(kr).Pero: como l«ımr→0 |Nm(kr)| = ∞ solamente se usa Jm(kr):

R(r) = Jm(kr)

Page 168: Métodos Numéricos en Física

Condiciones de borde.

La condición de borde z(r0, ϕ, t) = 0 es equivalente a R(r0) = 0:

Jm(kr0) = 0

Como Jm(z) tiene los ceros νm,n (n = 1,2, . . . ,∞), es decirJm(νm,n) = 0, se requieren valores discretos para k :

k → km,n =νm,n

r0, ω → ωm,n = ckm,n

Membrana oscila solo con un conjunto de frecuencias discretas:

ζλ(r , ϕ) → ζm,n(r , ϕ) ∝ Jm(km,nr)e±imϕe±ickm,nt

Después una normalisación tenemos unconjunto completo de funciones ortonormales.

Page 169: Métodos Numéricos en Física

Condiciones de borde.

La condición de borde z(r0, ϕ, t) = 0 es equivalente a R(r0) = 0:

Jm(kr0) = 0

Como Jm(z) tiene los ceros νm,n (n = 1,2, . . . ,∞), es decirJm(νm,n) = 0, se requieren valores discretos para k :

k → km,n =νm,n

r0, ω → ωm,n = ckm,n

Membrana oscila solo con un conjunto de frecuencias discretas:

ζλ(r , ϕ) → ζm,n(r , ϕ) ∝ Jm(km,nr)e±imϕe±ickm,nt

Después una normalisación tenemos unconjunto completo de funciones ortonormales.

Page 170: Métodos Numéricos en Física

Condiciones de borde.

La condición de borde z(r0, ϕ, t) = 0 es equivalente a R(r0) = 0:

Jm(kr0) = 0

Como Jm(z) tiene los ceros νm,n (n = 1,2, . . . ,∞), es decirJm(νm,n) = 0, se requieren valores discretos para k :

k → km,n =νm,n

r0, ω → ωm,n = ckm,n

Membrana oscila solo con un conjunto de frecuencias discretas:

ζλ(r , ϕ) → ζm,n(r , ϕ) ∝ Jm(km,nr)e±imϕe±ickm,nt

Después una normalisación tenemos unconjunto completo de funciones ortonormales.

Page 171: Métodos Numéricos en Física

Conjunto completo de funciones ortonormales.

Tenemos un conjunto de funciones ζλ(x) en un espacio x ∈ S.Es un conjunto completo de funciones ortonormales si tenemos:

Ortonormalidad (ortogonalidad + normalisación):∫S

dxζ∗µ(x)ζλ(x) = δµ,λ =

1, µ = λ0, µ 6= λ

Completitud:∑λ

ζ∗λ(x)ζλ(y) = δ(x − y), x , y ∈ S

Page 172: Métodos Numéricos en Física

Conjunto completo de funciones ortonormales.

Tenemos un conjunto de funciones ζλ(x) en un espacio x ∈ S.Es un conjunto completo de funciones ortonormales si tenemos:

Ortonormalidad (ortogonalidad + normalisación):∫S

dxζ∗µ(x)ζλ(x) = δµ,λ =

1, µ = λ0, µ 6= λ

Completitud:∑λ

ζ∗λ(x)ζλ(y) = δ(x − y), x , y ∈ S

Page 173: Métodos Numéricos en Física

Conjunto completo de funciones ortonormales.

Tenemos un conjunto de funciones ζλ(x) en un espacio x ∈ S.Es un conjunto completo de funciones ortonormales si tenemos:

Ortonormalidad (ortogonalidad + normalisación):∫S

dxζ∗µ(x)ζλ(x) = δµ,λ =

1, µ = λ0, µ 6= λ

Completitud:∑λ

ζ∗λ(x)ζλ(y) = δ(x − y), x , y ∈ S

Page 174: Métodos Numéricos en Física

Ejemplos.

En el espacio S = R las tenemos el conjunto completo defunciones ortonormales:

ζk (x) =1√2π

eikx , k ∈ R

Ortonormalidad tenemos porque:

12π

∫ ∞

−∞dxe−iqxeikx = δ(q − k)

Completos son porque:

12π

∫dke−ikxeiky = δ(x − y)

Otros ejemplos:

Polinomiales ortogonales: L(a)n (x), Hn(x), Tn(x), P(a,b)

n (x), etc.Funciones de Bessel Jn(x), Nn(x) etc.y muchos más...

Page 175: Métodos Numéricos en Física

Ejemplos.

En el espacio S = R las tenemos el conjunto completo defunciones ortonormales:

ζk (x) =1√2π

eikx , k ∈ R

Ortonormalidad tenemos porque:

12π

∫ ∞

−∞dxe−iqxeikx = δ(q − k)

Completos son porque:

12π

∫dke−ikxeiky = δ(x − y)

Otros ejemplos:

Polinomiales ortogonales: L(a)n (x), Hn(x), Tn(x), P(a,b)

n (x), etc.Funciones de Bessel Jn(x), Nn(x) etc.y muchos más...

Page 176: Métodos Numéricos en Física

Ondas en un fluido.

Ondas superficiales de un fluido (ecuación linearisada):∂x [h(x , y)∂x ] + ∂y [h(x , y)∂y ]− 1

g∂2

t

z(x , y , t) = 0

donde g = constante gravitacional y h(x , y) es la altitud/nivel delliquido, c2 = gh depende del lugar.

Definir variables sin unidades:

τ = ω0t , ξ =x

∆x, η =

y∆y

, ζ =z

∆z, δ(ξ, η) =

h(ξ∆x , η∆y)

∆z

Sale la ecuación de onda:1ρ∂ξ [δ(ξ, η)∂ξ] + ρ∂η [δ(ξ, η)∂η]−

1v2 ∂

ζ(ξ, η, t) = 0

dondeρ = ∆x/∆y y v2 = g∆z/(ω20∆x∆y).

Page 177: Métodos Numéricos en Física

Ondas en un fluido.

Ondas superficiales de un fluido (ecuación linearisada):∂x [h(x , y)∂x ] + ∂y [h(x , y)∂y ]− 1

g∂2

t

z(x , y , t) = 0

donde g = constante gravitacional y h(x , y) es la altitud/nivel delliquido, c2 = gh depende del lugar.

Definir variables sin unidades:

τ = ω0t , ξ =x

∆x, η =

y∆y

, ζ =z

∆z, δ(ξ, η) =

h(ξ∆x , η∆y)

∆z

Sale la ecuación de onda:1ρ∂ξ [δ(ξ, η)∂ξ] + ρ∂η [δ(ξ, η)∂η]−

1v2 ∂

ζ(ξ, η, t) = 0

dondeρ = ∆x/∆y y v2 = g∆z/(ω20∆x∆y).

Page 178: Métodos Numéricos en Física

Ondas en un fluido.

Ondas superficiales de un fluido (ecuación linearisada):∂x [h(x , y)∂x ] + ∂y [h(x , y)∂y ]− 1

g∂2

t

z(x , y , t) = 0

donde g = constante gravitacional y h(x , y) es la altitud/nivel delliquido, c2 = gh depende del lugar.

Definir variables sin unidades:

τ = ω0t , ξ =x

∆x, η =

y∆y

, ζ =z

∆z, δ(ξ, η) =

h(ξ∆x , η∆y)

∆z

Sale la ecuación de onda:1ρ∂ξ [δ(ξ, η)∂ξ] + ρ∂η [δ(ξ, η)∂η]−

1v2 ∂

ζ(ξ, η, t) = 0

dondeρ = ∆x/∆y y v2 = g∆z/(ω20∆x∆y).

Page 179: Métodos Numéricos en Física

Sistema completo de funciones ortonormales.Sabemos las auto-soluciónes ζλ(ξ, η) de(

1ρ∂2ξ + ρ∂2

η + κ2λ

)ζλ(ξ, η, t) = 0, κ2

λ = (νλ/v)2

con las mismas condiciones de borde, donde νλ = ωλ/ω0.Entonces usamos una expansión en este sistema completa defunciones ortonormales:

ζ(ξ, η, τ) =∑λ

cλ(τ)ζλ(ξ, η)

donde cλ(τ) son los coeficientes de la expansión.Insertar en la ecuación de onda:∑

λ

[1ρ∂ξ (δ∂ξ) + ρ∂η (δ∂η)

]ζλ −

1v2 cλζλ

=

∑λ

δ(

1ρ∂2ξ + ρ∂2

η

)ζλ︸ ︷︷ ︸

=−κ2λζλ

+(∇δ) · (∇ζλ)

− 1v2 cλζλ

= 0

Page 180: Métodos Numéricos en Física

Sistema completo de funciones ortonormales.Sabemos las auto-soluciónes ζλ(ξ, η) de(

1ρ∂2ξ + ρ∂2

η + κ2λ

)ζλ(ξ, η, t) = 0, κ2

λ = (νλ/v)2

con las mismas condiciones de borde, donde νλ = ωλ/ω0.Entonces usamos una expansión en este sistema completa defunciones ortonormales:

ζ(ξ, η, τ) =∑λ

cλ(τ)ζλ(ξ, η)

donde cλ(τ) son los coeficientes de la expansión.Insertar en la ecuación de onda:∑

λ

[1ρ∂ξ (δ∂ξ) + ρ∂η (δ∂η)

]ζλ −

1v2 cλζλ

=

∑λ

δ(

1ρ∂2ξ + ρ∂2

η

)ζλ︸ ︷︷ ︸

=−κ2λζλ

+(∇δ) · (∇ζλ)

− 1v2 cλζλ

= 0

Page 181: Métodos Numéricos en Física

Sistema completo de funciones ortonormales.Sabemos las auto-soluciónes ζλ(ξ, η) de(

1ρ∂2ξ + ρ∂2

η + κ2λ

)ζλ(ξ, η, t) = 0, κ2

λ = (νλ/v)2

con las mismas condiciones de borde, donde νλ = ωλ/ω0.Entonces usamos una expansión en este sistema completa defunciones ortonormales:

ζ(ξ, η, τ) =∑λ

cλ(τ)ζλ(ξ, η)

donde cλ(τ) son los coeficientes de la expansión.Insertar en la ecuación de onda:∑

λ

[1ρ∂ξ (δ∂ξ) + ρ∂η (δ∂η)

]ζλ −

1v2 cλζλ

=

∑λ

δ(

1ρ∂2ξ + ρ∂2

η

)ζλ︸ ︷︷ ︸

=−κ2λζλ

+(∇δ) · (∇ζλ)

− 1v2 cλζλ

= 0

Page 182: Métodos Numéricos en Física

Multiplicar con ζ∗µ(ξ, η) e integrar, es decir aplicar de la izquierda:∫dξ∫

dηζ∗µ(ξ, η) . . .

Usando ortonormalidad∫

dξ∫

dηζ∗µζλ = δµ,λresulta:

∑λ

−κ2λ

∫dξ∫

dηζ∗µδζλ︸ ︷︷ ︸=Aµ,λ

+

∫dξ∫

dηζ∗µ(∇δ) · (∇ζλ)︸ ︷︷ ︸=Bµ,λ

− 1v2 cλδµ,λ

= 0

Qué sorpresa! — Tenemos una ecuación diferencial ordinaria:

d2cµ(τ)dτ2 = −v2

∑λ

(Aµ,λκ2

λ − Bµ,λ)

cλ(τ)

“Solamente” hay que obtener los coeficientes Aµ,λ y Bµ,λ!

Page 183: Métodos Numéricos en Física

Multiplicar con ζ∗µ(ξ, η) e integrar, es decir aplicar de la izquierda:∫dξ∫

dηζ∗µ(ξ, η) . . .

Usando ortonormalidad∫

dξ∫

dηζ∗µζλ = δµ,λresulta:

∑λ

−κ2λ

∫dξ∫

dηζ∗µδζλ︸ ︷︷ ︸=Aµ,λ

+

∫dξ∫

dηζ∗µ(∇δ) · (∇ζλ)︸ ︷︷ ︸=Bµ,λ

− 1v2 cλδµ,λ

= 0

Qué sorpresa! — Tenemos una ecuación diferencial ordinaria:

d2cµ(τ)dτ2 = −v2

∑λ

(Aµ,λκ2

λ − Bµ,λ)

cλ(τ)

“Solamente” hay que obtener los coeficientes Aµ,λ y Bµ,λ!

Page 184: Métodos Numéricos en Física

Multiplicar con ζ∗µ(ξ, η) e integrar, es decir aplicar de la izquierda:∫dξ∫

dηζ∗µ(ξ, η) . . .

Usando ortonormalidad∫

dξ∫

dηζ∗µζλ = δµ,λresulta:

∑λ

−κ2λ

∫dξ∫

dηζ∗µδζλ︸ ︷︷ ︸=Aµ,λ

+

∫dξ∫

dηζ∗µ(∇δ) · (∇ζλ)︸ ︷︷ ︸=Bµ,λ

− 1v2 cλδµ,λ

= 0

Qué sorpresa! — Tenemos una ecuación diferencial ordinaria:

d2cµ(τ)dτ2 = −v2

∑λ

(Aµ,λκ2

λ − Bµ,λ)

cλ(τ)

“Solamente” hay que obtener los coeficientes Aµ,λ y Bµ,λ!

Page 185: Métodos Numéricos en Física

Piscina rectangular.

x

z

yb

a

hm«ax

hm«ın

Usamos:

∆x = a, ∆y = b, ∆z = (hm«ax + hm«ın)/2

de lo cual resulta que ρ = a/b y v2 = g(hm«ax + hm«ın)/(2ω20ab).

La ecuación de Helmholtz simplificada es:(1ρ∂2ξ + ρ∂2

η + κ2λ

)ζλ(ξ, η) = 0

Condiciones de borde son:

∇ξλ(ξ, η) = 0, (ξ, η) ∈ borde

Page 186: Métodos Numéricos en Física

Funciones ortonormales.

Auto-soluciones de la ecuacion de Helmholtz son:

ζm,n(x , y) = Nm,n cos(mπξ) cos(nπη), Nm,n = 2 [(δm,0 + 1)(δn,0 + 1)]−12

donde m,n = 0,1, . . . ,∞ pero sin m = n = 0 y

ν2m,n = v2κ2

m,n = v2π2(

m2

ρ+ ρn2

)Podemos fijar v = 1, es decir

ω0 =

√g(hm«ax + hm«ın)

2ab

y asi tenemos siempre νm,n = κm,n.

Page 187: Métodos Numéricos en Física

Nivel del agua.

x

z

yb

a

hm«ax

hm«ın

El nivel del agua es:

h(y) = hm«ax −y∆h

bdonde ∆h = hm«ax − hm«ın, entonces tenemos

δ(η) =hm«ax − η∆h

(hm«ax + hm«ın)/2= δ0 − ηδ1

Page 188: Métodos Numéricos en Física

Integrales Am,n.

La definición es:

Am,n,m′,n′ = Nm,nNm′,n′

∫ 1

0dξ∫ 1

0dηζ∗m,n(ξ, η)δ(η)ζm′,n′(ξ, η)

Después haber integrado ξ:

Am,n,m′,n′ = δm,m′Nm,nNm,n′

∫ 1

0dη cos(πnη) cos(πn′η)δ(η)

= δm,,m′(δn,n′N 2

m,nδ0 −Nm,nNm,n′δ1In,n′)

La integral resulta como:

In,n′ =

∫ 1

0dηη cos(πnη) cos(πn′η) =

12 , n = n′ = 014 , n = n′ 6= 0

[(−1)n+n′−1](n2+n′2)π2(n2−n′2)2 , n 6= n′

Page 189: Métodos Numéricos en Física

Integrales Bm,n.

Definición:

Bm,n,m′,n′ =

∫ 1

0dξ∫ 1

0dηζ∗m,n(ξ, η)δ

′(η)∂ζm′,n′(ξ, η)

∂η

Después haber integrado ξ:

Bm,n,m′,n′ = δm,m′2πn′∆h

hm«ax + hm«ın

∫ 1

0dη cos(nπη) sin(n′πη)

= δm,m′πn′∆h

hm«ax + hm«ın

∫ 1

0dη sin[(n′ + n)πη] + sin[(n′ − n)πη]

= δm,m′πn′∆h

hm«ax + hm«ın

sin[(n′ + n)π]

(n′ + n)π+

sin[(n′ − n)π]

(n′ − n)π

= 0

Page 190: Métodos Numéricos en Física

Ondas en piscina: sistema de ecuaciones.

Tenemos entonces el sistema de ecuaciones:

cm,n = dm,n

dm,n = −∑n′

([N 2

m,nδ0δn,n′ −Nm,nNm,n′δ1In,n′]κ2

m,n′)

cm,n′(τ)

donde

κ2m,n = π2

(m2

ρ+ ρn2

)In,n′ = δn,n′

1 + δn,0

4+ (1− δn,n′)

[(−1)n+n′ − 1](n2 + n′2)π2(n2 − n′2)2

Page 191: Métodos Numéricos en Física

¿Cómo implementar el vector de datos?

Nuestro vector de datos de repente son 2 matrices, cm,n y dm,n, conm,n = 0,1, . . . ,∞ pero nuestro programa necesita un solo vector contamaño finito!

Limitar índices: m = 0, . . . ,M − 1 y n = 0,1, . . . ,N − 1.¿Qué significa eso?M, N son los números máximos de oscilaciones de ζm,n(ξ, η) enξ, η ∈ [0,1], entonces tenemos algo como una discretisación delespacio (ξ, η) en un grid de M × N elementos.Corresponde a una resolución espacial de

aM× b

N

Page 192: Métodos Numéricos en Física

¿Cómo implementar el vector de datos?

Nuestro vector de datos de repente son 2 matrices, cm,n y dm,n, conm,n = 0,1, . . . ,∞ pero nuestro programa necesita un solo vector contamaño finito!

Limitar índices: m = 0, . . . ,M − 1 y n = 0,1, . . . ,N − 1.¿Qué significa eso?M, N son los números máximos de oscilaciones de ζm,n(ξ, η) enξ, η ∈ [0,1], entonces tenemos algo como una discretisación delespacio (ξ, η) en un grid de M × N elementos.Corresponde a una resolución espacial de

aM× b

N

Page 193: Métodos Numéricos en Física

¿Cómo implementar el vector de datos?

Nuestro vector de datos de repente son 2 matrices, cm,n y dm,n, conm,n = 0,1, . . . ,∞ pero nuestro programa necesita un solo vector contamaño finito!

Limitar índices: m = 0, . . . ,M − 1 y n = 0,1, . . . ,N − 1.¿Qué significa eso?M, N son los números máximos de oscilaciones de ζm,n(ξ, η) enξ, η ∈ [0,1], entonces tenemos algo como una discretisación delespacio (ξ, η) en un grid de M × N elementos.Corresponde a una resolución espacial de

aM× b

N

Page 194: Métodos Numéricos en Física

Construir un vector de datos eficiente:

~x =

c0,0d0,0c0,1d0,1

...d0,N−1

c1,0...

d1,N−1......

dM−1,N−1

donde los elementos c0,0 y d0,0 no se usan.

Page 195: Métodos Numéricos en Física

No quiero hacer este vector por mano. Entonces un pequeñomacro para traducir (m,n) → λ:#define idx(m,n) ((m) * N + (n))

Page 196: Métodos Numéricos en Física

Implementar la función f .

Ahora tenemos una multiplicación con una matriz:

~x(τ) =~~M ·~x(τ)

donde

~~M =

0 00 00 1 0 0x 0 x 0 x · · ·0 0 0 1 0 · · · 0

Page 197: Métodos Numéricos en Física

ddt

c0,0...

...cm,ndm,n

...

...dM−1,N−1

=

0 1

x 0 x 0 x 0 x 0 x 0

·

c0,0...

...cm,ndm,n

...

...dM−1,N−1

Page 198: Métodos Numéricos en Física

¿Y donde esta el resultado?

Tenemos ahora la solución numérica para los coeficientes cm,n.Pero queremos la función original:

ζ(ξ, η, τ) =∑m,n

cm,n(τ)ζm,n(ξ, η)

dondeζm,n(ξ, η) = Nm,n cos(mπξ) cos(nπη)

¿Se puede calcular una suma de este tipo? — No!Es altamente inpreciso e inestable!Pero: Parte del sumante satisface una recursión:

cos(nθ) = 2 cos(θ) cos[(n − 1)θ]− cos[(n − 2)θ]

Para calcular la suma se puede usar la recursión de Clenshaw.

Page 199: Métodos Numéricos en Física

¿Y donde esta el resultado?

Tenemos ahora la solución numérica para los coeficientes cm,n.Pero queremos la función original:

ζ(ξ, η, τ) =∑m,n

cm,n(τ)ζm,n(ξ, η)

dondeζm,n(ξ, η) = Nm,n cos(mπξ) cos(nπη)

¿Se puede calcular una suma de este tipo? — No!Es altamente inpreciso e inestable!Pero: Parte del sumante satisface una recursión:

cos(nθ) = 2 cos(θ) cos[(n − 1)θ]− cos[(n − 2)θ]

Para calcular la suma se puede usar la recursión de Clenshaw.

Page 200: Métodos Numéricos en Física

¿Y donde esta el resultado?

Tenemos ahora la solución numérica para los coeficientes cm,n.Pero queremos la función original:

ζ(ξ, η, τ) =∑m,n

cm,n(τ)ζm,n(ξ, η)

dondeζm,n(ξ, η) = Nm,n cos(mπξ) cos(nπη)

¿Se puede calcular una suma de este tipo? — No!Es altamente inpreciso e inestable!Pero: Parte del sumante satisface una recursión:

cos(nθ) = 2 cos(θ) cos[(n − 1)θ]− cos[(n − 2)θ]

Para calcular la suma se puede usar la recursión de Clenshaw.

Page 201: Métodos Numéricos en Física

Suma con parte recursiva.

Objectivo:

Con coeficientes cn dados, calcular:

f (x) =N−1∑n=0

cngn(x)

donde gn(x) tiene la recursión:

gn+1(x) = αn(x)gn(x) + βn(x)gn−1(x)

Problema:

Coeficientes cn y/o gn(x) pueden ser oscilatorios con respecto an.Suma no es convergente con errores numéricos (inevitables)!

Page 202: Métodos Numéricos en Física

Suma con parte recursiva.

Objectivo:

Con coeficientes cn dados, calcular:

f (x) =N−1∑n=0

cngn(x)

donde gn(x) tiene la recursión:

gn+1(x) = αn(x)gn(x) + βn(x)gn−1(x)

Problema:

Coeficientes cn y/o gn(x) pueden ser oscilatorios con respecto an.Suma no es convergente con errores numéricos (inevitables)!

Page 203: Métodos Numéricos en Física

Construcción.Recuerde: f (x) =

Pn cngn(x).

Usando los coeficientes de la recursión:

gn+1(x) = αn(x)gn(x) + βn(x)gn−1(x)

vamos a definir una función hn(x):

hn(x) = αn(x)hn+1(x) + βn+1(x)hn+2(x) + cn (n = N − 1, . . . ,0)

con valores iniciales:

hN+1(x) = hN(x) = 0

Con eso sale:

cn = hn(x)− αn(x)hn+1(x)− βn+1(x)hn+2(x)

Usando eso en la suma:

f (x) =N−1∑n=0

[hn(x)− αn(x)hn+1(x)− βn+1(x)hn+2(x)] gn(x)

Page 204: Métodos Numéricos en Física

Construcción.Recuerde: f (x) =

Pn cngn(x).

Usando los coeficientes de la recursión:

gn+1(x) = αn(x)gn(x) + βn(x)gn−1(x)

vamos a definir una función hn(x):

hn(x) = αn(x)hn+1(x) + βn+1(x)hn+2(x) + cn (n = N − 1, . . . ,0)

con valores iniciales:

hN+1(x) = hN(x) = 0

Con eso sale:

cn = hn(x)− αn(x)hn+1(x)− βn+1(x)hn+2(x)

Usando eso en la suma:

f (x) =N−1∑n=0

[hn(x)− αn(x)hn+1(x)− βn+1(x)hn+2(x)] gn(x)

Page 205: Métodos Numéricos en Física

Construcción.Recuerde: f (x) =

Pn cngn(x).

Usando los coeficientes de la recursión:

gn+1(x) = αn(x)gn(x) + βn(x)gn−1(x)

vamos a definir una función hn(x):

hn(x) = αn(x)hn+1(x) + βn+1(x)hn+2(x) + cn (n = N − 1, . . . ,0)

con valores iniciales:

hN+1(x) = hN(x) = 0

Con eso sale:

cn = hn(x)− αn(x)hn+1(x)− βn+1(x)hn+2(x)

Usando eso en la suma:

f (x) =N−1∑n=0

[hn(x)− αn(x)hn+1(x)− βn+1(x)hn+2(x)] gn(x)

Page 206: Métodos Numéricos en Física

Reordenar la suma.Recuerde: f (x) =

PN−1n=0 [hn(x)− αn(x)hn+1(x)− βn+1(x)hn+2(x)] gn(x).

f (x) =

h0(x)− α0(x)h1(x)︸ ︷︷ ︸=c0+β1(x)h2(x)

−β1(x)h2(x)

g0(x)

+[h1(x)− α1(x)h2(x)− β2(x)h3(x)

]g1(x)

+[h2(x)− α2(x)h3(x)− β3(x)h4(x)

]g2(x)

...+

[h6(x)− α6(x)h7(x)− β7(x)h8(x)

]g6(x)

+[h7(x)− α7(x)h8(x)− β8(x)h9(x)

]g7(x)

+[h8(x)− α8(x)h9(x)− β9(x)h10(x)

]g8(x) + . . .

Page 207: Métodos Numéricos en Física

Reordenar la suma.Recuerde: f (x) =

PN−1n=0 [hn(x)− αn(x)hn+1(x)− βn+1(x)hn+2(x)] gn(x).

f (x) = . . .

...+

[hN−3(x)− αN−3(x)hN−2(x)− βN−2(x)hN−1(x)

]gN−3(x)

+

hN−2(x)− αN−2(x)hN−1(x)− βN−1(x) hN(x)︸ ︷︷ ︸=0

gN−2(x)

+

hN−1(x)− αN−1(x) hN(x)︸ ︷︷ ︸=0

−βN(x) hN+1(x)︸ ︷︷ ︸=0

gN−1(x)

Page 208: Métodos Numéricos en Física

Reordenar la suma.Recuerde: f (x) =

PN−1n=0 [hn(x)− αn(x)hn+1(x)− βn+1(x)hn+2(x)] gn(x).

f (x) = [c0 + β1(x)h2(x)] g0(x) + h1(x)g1(x)

+ h2(x) [g2(x)− α1(x)g1(x)− β1(x)g0(x)]︸ ︷︷ ︸=0

...+ hk (x) [gk (x)− αk−1(x)gk−1(x)− βk−1(x)gk−1(x)]︸ ︷︷ ︸

=0

...+ hN−1(x) [gN−1(x)− αN−2(x)gN−2(x)− βN−2(x)gN−3(x)]︸ ︷︷ ︸

=0

= [c0 + β1(x)h2(x)] g0(x) + h1(x)g1(x)

Page 209: Métodos Numéricos en Física

Reordenar la suma.Recuerde: f (x) =

PN−1n=0 [hn(x)− αn(x)hn+1(x)− βn+1(x)hn+2(x)] gn(x).

Tenemos entonces:

f (x) = [c0 + β1(x)h2(x)]︸ ︷︷ ︸=h0(x)−α0(x)h1(x)

g0(x) + h1(x)g1(x)

= h0(x)g0(x) + h1(x) [g1(x)− α0(x)g0(x)]

Page 210: Métodos Numéricos en Física

Recursión de Clenshaw.

f (x) =N−1∑n=0

cngn(x) con : gn+1(x) = αn(x)gn(x) + βn(x)gn−1(x)

Solución: Recursión de Clenshaw:

f (x) = h0(x)g0(x) + h1(x) [g1(x)− α0(x)g0(x)]

donde h0,1(x) se calcula a través de:

hn(x) = αn(x)hn+1(x) + βn+1(x)hn+2(x) + cn (n = N − 1, . . . ,0)

con valores iniciales:

hN+1(x) = hN(x) = 0

Page 211: Métodos Numéricos en Física

Recursión de Clenshaw.

f (x) =N−1∑n=0

cngn(x) con : gn+1(x) = αn(x)gn(x) + βn(x)gn−1(x)

Solución: Recursión de Clenshaw:

f (x) = h0(x)g0(x) + h1(x) [g1(x)− α0(x)g0(x)]

donde h0,1(x) se calcula a través de:

hn(x) = αn(x)hn+1(x) + βn+1(x)hn+2(x) + cn (n = N − 1, . . . ,0)

con valores iniciales:

hN+1(x) = hN(x) = 0

Page 212: Métodos Numéricos en Física

Implementar nuestro caso: Piscina.

Tenemos dos sumas:

ζ(ξ, η, τ) =∑

n

Cn(η)

=Sn(ξ)︷ ︸︸ ︷∑m

cm,nNm,n︸ ︷︷ ︸=cm,n

Cm(ξ), Cn(x) = cos(nπx)

con la recursión:

Cn+1(x) = 2 cos(πx)Cn(x)− Cn−1(x)

entonces αn = 2 cos(πx) y βn = −1.

Page 213: Métodos Numéricos en Física

ζ(ξ, η, τ) =∑

n

Cn(η)

=Sn(ξ)︷ ︸︸ ︷∑m

cm,nCm(ξ), cm,n = cm,nNm,n

1 Suma m con Clenshaw:

Sn(ξ) =M−1∑m=0

cm,nCm(ξ) = h(n)0 (ξ)− cos(πξ)h(n)

1 (ξ)

donde:

h(n)m (ξ) = 2 cos(πξ)h(n)

m+1(ξ)− h(n)m+2(ξ) + cm,n (m = M − 1, . . . ,0)

2 Suma n con Clenshaw:

ζ(ξ, η) =N−1∑n=0

Sn(ξ)Cn(η) = h(ξ)0 (η)− cos(πη)h(ξ)

1 (η)

donde ahora:

h(ξ)n (η) = 2 cos(πη)h(ξ)

n+1(η)− h(ξ)n+2(η) + Sn(ξ) (n = N − 1, . . . ,0)

Page 214: Métodos Numéricos en Física

ζ(ξ, η, τ) =∑

n

Cn(η)

=Sn(ξ)︷ ︸︸ ︷∑m

cm,nCm(ξ), cm,n = cm,nNm,n

1 Suma m con Clenshaw:

Sn(ξ) =M−1∑m=0

cm,nCm(ξ) = h(n)0 (ξ)− cos(πξ)h(n)

1 (ξ)

donde:

h(n)m (ξ) = 2 cos(πξ)h(n)

m+1(ξ)− h(n)m+2(ξ) + cm,n (m = M − 1, . . . ,0)

2 Suma n con Clenshaw:

ζ(ξ, η) =N−1∑n=0

Sn(ξ)Cn(η) = h(ξ)0 (η)− cos(πη)h(ξ)

1 (η)

donde ahora:

h(ξ)n (η) = 2 cos(πη)h(ξ)

n+1(η)− h(ξ)n+2(η) + Sn(ξ) (n = N − 1, . . . ,0)

Page 215: Métodos Numéricos en Física

ζ(ξ, η, τ) =∑

n

Cn(η)

=Sn(ξ)︷ ︸︸ ︷∑m

cm,nCm(ξ), cm,n = cm,nNm,n

1 Suma m con Clenshaw:

Sn(ξ) =M−1∑m=0

cm,nCm(ξ) = h(n)0 (ξ)− cos(πξ)h(n)

1 (ξ)

donde:

h(n)m (ξ) = 2 cos(πξ)h(n)

m+1(ξ)− h(n)m+2(ξ) + cm,n (m = M − 1, . . . ,0)

2 Suma n con Clenshaw:

ζ(ξ, η) =N−1∑n=0

Sn(ξ)Cn(η) = h(ξ)0 (η)− cos(πη)h(ξ)

1 (η)

donde ahora:

h(ξ)n (η) = 2 cos(πη)h(ξ)

n+1(η)− h(ξ)n+2(η) + Sn(ξ) (n = N − 1, . . . ,0)

Page 216: Métodos Numéricos en Física

Piscina: Condiciones iniciales.

¿Si ζ(ξ, η, 0) = ζ0(ξ, η) es la condicion inicial, como se ven loscoeficientes iniciales?

Como tenemos un sistema de funciones ortonormales ycompletos:

cm,n(τ = 0) =

∫ 1

0dξ∫ 1

0dηζ∗m,n(ξ, η)ζ0(ξ, η)

Entonces tenemos una transformación de Fourier:

cm,n(0) = Nm,n

∫ 1

0dξ cos(mπξ)

∫ 1

0dη cos(nπη)ζ0(ξ, η)

Page 217: Métodos Numéricos en Física

Piscina: Condiciones iniciales.

¿Si ζ(ξ, η, 0) = ζ0(ξ, η) es la condicion inicial, como se ven loscoeficientes iniciales?

Como tenemos un sistema de funciones ortonormales ycompletos:

cm,n(τ = 0) =

∫ 1

0dξ∫ 1

0dηζ∗m,n(ξ, η)ζ0(ξ, η)

Entonces tenemos una transformación de Fourier:

cm,n(0) = Nm,n

∫ 1

0dξ cos(mπξ)

∫ 1

0dη cos(nπη)ζ0(ξ, η)

Page 218: Métodos Numéricos en Física

Piscina: Condiciones iniciales.

¿Si ζ(ξ, η, 0) = ζ0(ξ, η) es la condicion inicial, como se ven loscoeficientes iniciales?

Como tenemos un sistema de funciones ortonormales ycompletos:

cm,n(τ = 0) =

∫ 1

0dξ∫ 1

0dηζ∗m,n(ξ, η)ζ0(ξ, η)

Entonces tenemos una transformación de Fourier:

cm,n(0) = Nm,n

∫ 1

0dξ cos(mπξ)

∫ 1

0dη cos(nπη)ζ0(ξ, η)

Page 219: Métodos Numéricos en Física

Caso especial: bumb en al agua.Alguien con forma esferica (guaton) se cayo en el agua, ahoratenemos un cerrito Gaussiano:

ζ0(ξ, η) = k exp

[− (ξ − ξ0)

2

2σ2ξ

− (η − η0)2

2σ2η

]

Bumb suficientemente lejos de los muros de la piscina:0 < x0 ± σ < 1∫ 1

0dx cos(nπx)e−(x−x0)

2/2σ2≈∫ ∞

−∞dx cos(nπx)e−(x−x0)

2/2σ2

Tenemos suerte — “Fourier de Gauss = Gauss”:∫ ∞

−∞dx cos(nπx)e−(x−x0)

2/2σ2=√

2πσ cos(nπx0)e−(πσn)2/2

Entonces los coeficientes iniciales son:

cm,n(0) = k2πσξσηNm,n cos(mπξ0) cos(nπη0) exp[−π

2

2(σ2ξm

2 + σ2ηn2)]

Page 220: Métodos Numéricos en Física

Caso especial: bumb en al agua.Alguien con forma esferica (guaton) se cayo en el agua, ahoratenemos un cerrito Gaussiano:

ζ0(ξ, η) = k exp

[− (ξ − ξ0)

2

2σ2ξ

− (η − η0)2

2σ2η

]

Bumb suficientemente lejos de los muros de la piscina:0 < x0 ± σ < 1∫ 1

0dx cos(nπx)e−(x−x0)

2/2σ2≈∫ ∞

−∞dx cos(nπx)e−(x−x0)

2/2σ2

Tenemos suerte — “Fourier de Gauss = Gauss”:∫ ∞

−∞dx cos(nπx)e−(x−x0)

2/2σ2=√

2πσ cos(nπx0)e−(πσn)2/2

Entonces los coeficientes iniciales son:

cm,n(0) = k2πσξσηNm,n cos(mπξ0) cos(nπη0) exp[−π

2

2(σ2ξm

2 + σ2ηn2)]

Page 221: Métodos Numéricos en Física

Caso especial: bumb en al agua.Alguien con forma esferica (guaton) se cayo en el agua, ahoratenemos un cerrito Gaussiano:

ζ0(ξ, η) = k exp

[− (ξ − ξ0)

2

2σ2ξ

− (η − η0)2

2σ2η

]

Bumb suficientemente lejos de los muros de la piscina:0 < x0 ± σ < 1∫ 1

0dx cos(nπx)e−(x−x0)

2/2σ2≈∫ ∞

−∞dx cos(nπx)e−(x−x0)

2/2σ2

Tenemos suerte — “Fourier de Gauss = Gauss”:∫ ∞

−∞dx cos(nπx)e−(x−x0)

2/2σ2=√

2πσ cos(nπx0)e−(πσn)2/2

Entonces los coeficientes iniciales son:

cm,n(0) = k2πσξσηNm,n cos(mπξ0) cos(nπη0) exp[−π

2

2(σ2ξm

2 + σ2ηn2)]

Page 222: Métodos Numéricos en Física

Caso especial: bumb en al agua.Alguien con forma esferica (guaton) se cayo en el agua, ahoratenemos un cerrito Gaussiano:

ζ0(ξ, η) = k exp

[− (ξ − ξ0)

2

2σ2ξ

− (η − η0)2

2σ2η

]

Bumb suficientemente lejos de los muros de la piscina:0 < x0 ± σ < 1∫ 1

0dx cos(nπx)e−(x−x0)

2/2σ2≈∫ ∞

−∞dx cos(nπx)e−(x−x0)

2/2σ2

Tenemos suerte — “Fourier de Gauss = Gauss”:∫ ∞

−∞dx cos(nπx)e−(x−x0)

2/2σ2=√

2πσ cos(nπx0)e−(πσn)2/2

Entonces los coeficientes iniciales son:

cm,n(0) = k2πσξσηNm,n cos(mπξ0) cos(nπη0) exp[−π

2

2(σ2ξm

2 + σ2ηn2)]

Page 223: Métodos Numéricos en Física

Parte IVFunciones Especiales

Page 224: Métodos Numéricos en Física

Shot-noise y la distribución de Poisson.

pling!

plang!

plong!

Probabilidad Pn para observar n “clicks” en un intervalo del tiempo∆t :

Pn =(n)n

n!e−n, (distribución de Poisson)

donde n es el número promedio:

n =∞∑

n=0

Pnn

Page 225: Métodos Numéricos en Física

Shot-noise limit.

¿Cuál es el ancho de esta distribución? — Es la varianza ∆n (rms =root-mean-square)!

∆n =

√n2 − (n)2

Para la distribución de Poisson:

∆n =√

n, (shot-noise limit)

Un proceso estochastico es:

super-Poissonian si ∆n >√

n,sub-Poissonian si ∆n <

√n.

Ejemplo: Estadistica de fotones de un laser es distribución dePoisson.

Page 226: Métodos Numéricos en Física

¿Cómo calcular la distribución de Poisson?

Pn =(n)n

n!e−n

Se requieren tres funciones:

Función exponential math.h: double exp(double);

Potencia math.h: double pow(double, double);

Factorial falta!

Factorial tiene una recursión:

n! = n · (n − 1)! = n · (n − 1) · (n − 2) · · ·2 ·1

con los casos especiales: 0! = 1! = 1.

Page 227: Métodos Numéricos en Física

Implementación con recursión I.

1 #include <stdio.h>2

3 int fac(int n)4 5 int nfac;6

7 if (n <= 1)8 nfac = 1;9 else

10 nfac = n;11 do 12 n = n - 1;13 nfac = nfac * n;14 while (n > 1);15 16 return nfac;17

Page 228: Métodos Numéricos en Física

Implementación con recursión I.

19 int main(void)20 21 int n, m;22

23 for (n = 0; n <= 40; n = n + 1) 24 m = fac(n);25 printf("fac(%d) = %d\n", n, m);26 27 return 0;28

Page 229: Métodos Numéricos en Física

Implementación con recursión II.Esta vez con tipo double.

1 #include <stdio.h>2

3 double fac(double n)4 5 double nfac;6

7 if (n <= 1.0)8 nfac = 1.0;9 else

10 nfac = n;11 do 12 n -= 1.0;13 nfac *= n;14 while (n > 1.0);15 16 return nfac;17

Page 230: Métodos Numéricos en Física

Implementación con recursión II.Esta vez con tipo double.

19 int main(void)20 21 int n;22 double m;23

24 for (n = 0; n <= 180; n++) 25 /* Here: automatic type cast */26 m = fac(n);27 printf("fac(%d) = %g\n", n, m);28 29 return 0;30

Page 231: Métodos Numéricos en Física

Problema.

Uno no puede calcular el factorial porque siempre habráresultados más grandes que el rango de valores posibles en elcomputador.Pero los resultados de una función útil, que contiene el factorialnormalmente son valores “normales”.Ejemplo: Distribución de Poisson

Pn =(n)n

n!e−n ∈ [0,1]

mientras:

l«ımn→∞

(n)n = ∞, (n > 1), l«ımn→∞

n! = ∞

Entonces hay el problema de OVERFLOW!

Page 232: Métodos Numéricos en Física

Solución.

Hay que combinar las cosas en vez de separarlas:

Pn =(n)n

n!e−n

=eln[(n)n]

eln(n!)e−n

= exp

n ln(n)− n − ln(n!)︸ ︷︷ ︸∈[−∞,0]

El exponential actua como amplificador, y por lo tanto elexponente contiene números más chicos.Se cancelan en el exponente los números positivos y negativos yel exponente contiene después un número “normal”.Siempre se necesitará ln(n!) en vez de n!

Page 233: Métodos Numéricos en Física

La función Gamma.

Definición:Γ(z) =

∫ ∞

0dxe−xxz−1, <(z) > 0

Tiene una recursión:

Γ(z + 1) = z · Γ(z), Γ(1) = 1

Asi podemos ver que:

Γ(z + 1) = z · (z − 1) · · ·1 · Γ(1) = z!

Entonces hay que implementar una función para ln[Γ(z)].

Page 234: Métodos Numéricos en Física

Aproximación.Existe la aproximación de Stirling (z →∞):

Γ(z) ≈√

2πe−zzz− 12

[1 +

112z

+1

288z2 + . . .

]Pero mejor es la aproximación de Lanczos (z > 0):

Γ(z + 1) ≈√

2πe−(z+γ+ 12 )

(z + γ +

12

)z+ 12

×[c0 +

c1

z + 1+

c2

z + 2+ . . .+

cN−1

z + N − 1+ ε

]Error solamente |ε| < 2,0× 10−10 para γ = 5 y

~c =

1,00000000019001576,18009172947146−86,5053203294167724,01409824083091−1,231739572450155

0,1208650973866179× 10−2

−0,5395239384953× 10−5

, N = 7

Page 235: Métodos Numéricos en Física

Aproximación para ln[Γ(z)].

Aplicamos la recursión de la función Γ(z) y la aproximación deLanczos:

ln[Γ(z)] = ln[Γ(z + 1)

z

]= ln[Γ(z + 1)]− ln(z)

≈ −(

z + γ +12

)+

(z +

12

)ln(

z + γ +12

)+ ln

[√2π(

c0 + . . .+cN−1

z + N − 1

)]− ln(z)

= − (z + 5,5) + (z + 0,5) ln (z + 5,5)

+ ln[s(

c0 + . . .+cN−1

z + N − 1

)/z]

donde s =√

2π.

Page 236: Métodos Numéricos en Física

Implementación.sf_log_gamma.c

1 /*! \file sf_log_gamma.c */2 #define _XOPEN_SOURCE 5003 #define _ISOC99_SOURCE4

5 #include <math.h>6 #define SQRT_2PI (2.0 * M_SQRT2 / M_2_SQRTPI)7

8 /*! Calculates the natural logarithm of the Gamma9 function using the Lanczos approximation. */

10 double log_gamma(double x)11 12 double erg;13 double tmp;14 int n;15 static double s = SQRT_2PI;16 static double c[7] = 1.000000000190015,17 76.18009172947146, -86.50532032941677,18 24.01409824083091, -1.231739572450155,19 0.1208650973866179e-2, -0.5395239384953e-5;

Page 237: Métodos Numéricos en Física

Implementación.sf_log_gamma.c

21 tmp = x + 5.5;22 erg = (x + 0.5) * log(tmp) - tmp;23 tmp = c[0];24 for (n = 1; n < 7; n++)25 tmp += c[n] / (x + n);26 return erg + log(s * tmp / x);27

Page 238: Métodos Numéricos en Física

Distribución de Poisson.sf_poisson.c

La distribución de Poisson es ahora muy simple:

Pn = exp n ln(n)− n − ln[Γ(n + 1)]

Implementación:

1 /*! \file sf_poisson.c */2

3 #include <math.h>4

5 /*! Calculates the Poisson probability distribution. */6 double poisson(double n, double navg)7 8 double log_gamma(double); /* Declaration */9

10 return exp(n * log(navg) - log_gamma(n+1.0) - navg);11

Page 239: Métodos Numéricos en Física

Coeficiente binomial.sf_bico.c

Definición es:(mn

)=

m!

n!(m − n)!= exp ln[Γ(m + 1)]− [ln[Γ(n + 1)] + ln[Γ(m − n + 1)]]

Implementación:

1 /*! \file sf_bico.c */2

3 #include <math.h>4

5 /*! Calculates the binomial coefficient. */6 double bico(double m, double n)7 8 double log_gamma(double);9

10 return exp(log_gamma(m+1.0) - (log_gamma(n+1.0) + log_gamma(m-n+1.0)));11

Page 240: Métodos Numéricos en Física

La función Beta.sf_beta.c

Definición es:

B(z,w) =

∫ 1

0dx(1− x)w−1xz−1 =

Γ(z)Γ(w)

Γ(z + w)

Implementacíon:

1 /*! \file sf_beta.c */2

3 #include <math.h>4

5 /*! Calculates the Beta function. */6 double beta(double z, double w)7 8 double log_gamma(double);9

10 return exp((log_gamma(z) + log_gamma(w)) - log_gamma(z+w));11

Page 241: Métodos Numéricos en Física

Polinomial orthogonal de Hermite.

Definición a través de una suma:

Hn(x) =

[ n2 ]∑

k=0

(−1)k n!

k !(n − 2k)!(2x)n−2k

Por ejemplo:

H0(x) = 1, H1(x) = 2x , . . .

y tiene la relación:

Hn(−x) = (−1)nHn(x)

entonces solamente hay que calcularlo para x > 0.Se usa en la mecánica cuántica: Son los auto-soluciones deloscilador armónico.Calcular la suma directamente no es preciso ni estable!

Page 242: Métodos Numéricos en Física

Polinomial orthogonal de Hermite.

Definición a través de una suma:

Hn(x) =

[ n2 ]∑

k=0

(−1)k n!

k !(n − 2k)!(2x)n−2k

Por ejemplo:

H0(x) = 1, H1(x) = 2x , . . .

y tiene la relación:

Hn(−x) = (−1)nHn(x)

entonces solamente hay que calcularlo para x > 0.Se usa en la mecánica cuántica: Son los auto-soluciones deloscilador armónico.Calcular la suma directamente no es preciso ni estable!

Page 243: Métodos Numéricos en Física

Polinomial orthogonal de Hermite.

Definición a través de una suma:

Hn(x) =

[ n2 ]∑

k=0

(−1)k n!

k !(n − 2k)!(2x)n−2k

Por ejemplo:

H0(x) = 1, H1(x) = 2x , . . .

y tiene la relación:

Hn(−x) = (−1)nHn(x)

entonces solamente hay que calcularlo para x > 0.Se usa en la mecánica cuántica: Son los auto-soluciones deloscilador armónico.Calcular la suma directamente no es preciso ni estable!

Page 244: Métodos Numéricos en Física

Recursión para polinomiales de Hermite.

Existe la recursión:

Hn+1(x) = 2xHn(x)− 2nHn−1(x)

con los valores iniciales: H0(x) = 1, H1(x) = 2x .Problema es que son polinomiales: Hn(x) ∝ xn entonces estanexplotandose! — No se puede calcular el polinomial de Hermitedirectamente!Hay que reducir la explosividad con algunos factores adicionales.

Page 245: Métodos Numéricos en Física

Recursión para polinomiales de Hermite.

Existe la recursión:

Hn+1(x) = 2xHn(x)− 2nHn−1(x)

con los valores iniciales: H0(x) = 1, H1(x) = 2x .Problema es que son polinomiales: Hn(x) ∝ xn entonces estanexplotandose! — No se puede calcular el polinomial de Hermitedirectamente!Hay que reducir la explosividad con algunos factores adicionales.

Page 246: Métodos Numéricos en Física

Recursión para polinomiales de Hermite.

Existe la recursión:

Hn+1(x) = 2xHn(x)− 2nHn−1(x)

con los valores iniciales: H0(x) = 1, H1(x) = 2x .Problema es que son polinomiales: Hn(x) ∝ xn entonces estanexplotandose! — No se puede calcular el polinomial de Hermitedirectamente!Hay que reducir la explosividad con algunos factores adicionales.

Page 247: Métodos Numéricos en Física

Sistema de funciones ortonormales.Se sabe que:

Son orthogonales en el espacio [−∞,+∞]:∫ ∞

−∞dxe−x2

Hm(x)Hn(x) =√π2nn!δm,n

Entonces porque no usar la version normalisada:

Hn(x) =Hn(x)e−x2/2√√

π2nn!

Ahora son ortonormal:∫ ∞

−∞dxHm(x)Hn(x) = δm,n

Se puede demonstrar que además son completos:

∞∑n=0

Hn(x)Hn(x ′) = δ(x − x ′)

Page 248: Métodos Numéricos en Física

Sistema de funciones ortonormales.Se sabe que:

Son orthogonales en el espacio [−∞,+∞]:∫ ∞

−∞dxe−x2

Hm(x)Hn(x) =√π2nn!δm,n

Entonces porque no usar la version normalisada:

Hn(x) =Hn(x)e−x2/2√√

π2nn!

Ahora son ortonormal:∫ ∞

−∞dxHm(x)Hn(x) = δm,n

Se puede demonstrar que además son completos:

∞∑n=0

Hn(x)Hn(x ′) = δ(x − x ′)

Page 249: Métodos Numéricos en Física

Recursión modificada.

La recursión para la versión normalisada es diferente del original:

Hn+1(x) =Hn+1(x)e−x2/2√√π2n+1(n + 1)!

=2xHn(x)e−x2/2√√π2n+1(n + 1)!

− 2nHn−1(x)e−x2/2√√π2n+1(n + 1)!

=2x√

2(n + 1)Hn(x)− 2n√

22(n + 1)nHn−1(x)

= x

√2

n + 1Hn(x)−

√n

n + 1Hn−1(x)

Entonces tenemos:

Hn(x) = x

√2n

Hn−1(x)−√

1− 1n

Hn−2(x)

con H0(x) = π−14 e−x2/2, y H1 =

√2xH0(x) (ver recursión).

Page 250: Métodos Numéricos en Física

Recursión modificada.

La recursión para la versión normalisada es diferente del original:

Hn+1(x) =Hn+1(x)e−x2/2√√π2n+1(n + 1)!

=2xHn(x)e−x2/2√√π2n+1(n + 1)!

− 2nHn−1(x)e−x2/2√√π2n+1(n + 1)!

=2x√

2(n + 1)Hn(x)− 2n√

22(n + 1)nHn−1(x)

= x

√2

n + 1Hn(x)−

√n

n + 1Hn−1(x)

Entonces tenemos:

Hn(x) = x

√2n

Hn−1(x)−√

1− 1n

Hn−2(x)

con H0(x) = π−14 e−x2/2, y H1 =

√2xH0(x) (ver recursión).

Page 251: Métodos Numéricos en Física

Implementación.sf_hermite1.c

7 #define LN_SQRT_PI (0.5 * log(M_PI))8

9 /*! Calculates the normalized Hermite polynomial10 using a recurrence.11 \bug Works only up to \f$n=710\f$. */12 double hermite1(int n, double x)13 14 int m;15 double g_old, g, g_new;16

17 g_old = 0.0;18 g = exp(- 0.5 * (x * x + LN_SQRT_PI));19

20 if (n > 0) 21 for (m = 1; m <= n; m++) 22 g_new = sqrt(2.0/m) * x * g - sqrt(1.0 - 1.0/m) * g_old;23 g_old = g;24 g = g_new;25 26 27 return g;28

Page 252: Métodos Numéricos en Física

Resultados.main_sf_hermite1.c

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

0.4

0 5 10 15 20 25 30 35 40 45 50

f(x)

x

"h1main.dat" in 7

Page 253: Métodos Numéricos en Física

Resultados.main_sf_hermite1.c

-0.5

-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

0 5 10 15 20 25 30 35 40 45 50

f(x)

x

"h1main.dat" in 8

Page 254: Métodos Numéricos en Física

Resultados.main_sf_hermite1.c

-0.5

-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

35 36 37 38 39 40

f(x)

x

"h1main.dat" in 8

Page 255: Métodos Numéricos en Física

Versión con long double (ca. 25 % más lento).sf_hermite2.c

5 #include <math.h>6

7 #define LN_SQRT_PI (0.5 * log(M_PI))8

9 /*! Calculates the normalized Hermite polynomial10 using a recurrence. Works internally with11 long double precision. */12 double hermite2(int n, double x)13 14 int m;15 long double g_old, g, g_new;16

17 g_old = 0.0;18 g = expl(- 0.5 * (x * x + LN_SQRT_PI));19 if (n > 0) 20 for (m = 1; m <= n; m++) 21 g_new = sqrt(2.0/m) * x * g - sqrt(1.0 - 1.0/m) * g_old;22 g_old = g;23 g = g_new;24 25 26 return g;27

Page 256: Métodos Numéricos en Física

Resultado.main_sf_hermite2.c

-0.5

-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

0.4

35 36 37 38 39 40 41 42

f(x)

x

"h2main.dat" in 8"h1main.dat" in 8

Page 257: Métodos Numéricos en Física

¿Cuándo usar cuál versión?

¿Cuándo tenemos un problema UNDERFLOW?

La función Hn(x) tiene su ultimo máximo en la posición x ∼√

2n.Para empezar con la recursión usamos:

H0(x) = π−14 e−x2/2

cuyo valor al ultimo maximo de la función Hn(x) es

H0(√

2n) ∼ exp(−n)

Este valor tiene que estar más grande que el valor minimorepresentable:

exp(−n) > DBL_MIN

es equivalente a exp(n) < DBL_MAX entonces:

n < ln(DBL_MAX)

Page 258: Métodos Numéricos en Física

¿Cuándo usar cuál versión?

¿Cuándo tenemos un problema UNDERFLOW?

La función Hn(x) tiene su ultimo máximo en la posición x ∼√

2n.Para empezar con la recursión usamos:

H0(x) = π−14 e−x2/2

cuyo valor al ultimo maximo de la función Hn(x) es

H0(√

2n) ∼ exp(−n)

Este valor tiene que estar más grande que el valor minimorepresentable:

exp(−n) > DBL_MIN

es equivalente a exp(n) < DBL_MAX entonces:

n < ln(DBL_MAX)

Page 259: Métodos Numéricos en Física

¿Cuándo usar cuál versión?

¿Cuándo tenemos un problema UNDERFLOW?

La función Hn(x) tiene su ultimo máximo en la posición x ∼√

2n.Para empezar con la recursión usamos:

H0(x) = π−14 e−x2/2

cuyo valor al ultimo maximo de la función Hn(x) es

H0(√

2n) ∼ exp(−n)

Este valor tiene que estar más grande que el valor minimorepresentable:

exp(−n) > DBL_MIN

es equivalente a exp(n) < DBL_MAX entonces:

n < ln(DBL_MAX)

Page 260: Métodos Numéricos en Física

¿Cuándo usar cuál versión?

¿Cuándo tenemos un problema UNDERFLOW?

La función Hn(x) tiene su ultimo máximo en la posición x ∼√

2n.Para empezar con la recursión usamos:

H0(x) = π−14 e−x2/2

cuyo valor al ultimo maximo de la función Hn(x) es

H0(√

2n) ∼ exp(−n)

Este valor tiene que estar más grande que el valor minimorepresentable:

exp(−n) > DBL_MIN

es equivalente a exp(n) < DBL_MAX entonces:

n < ln(DBL_MAX)

Page 261: Métodos Numéricos en Física

Versión final.sf_hermite.c

1 /*! \file sf_hermite.c */2

3 #include <math.h>4 #include <float.h>5

6 #define NMAX ((int)(floor(log(DBL_MAX))))7

8 /*! Calculates the normalized Hermite polynomial using9 either double or long double version of the

10 recurrence. The decision depends on the level n in11 relation to its maximal x value where the polynomial12 ends. There the normalization factor is probed for13 being larger or smaller than DBL_MIN. */14 double hermite(int n, double x)15 16 double hermite1(int, double);17 double hermite2(int, double);18

19 return ((n < NMAX) ? hermite1(n, x) : hermite2(n, x));20

Page 262: Métodos Numéricos en Física

¿Cuál es el limite?main_sf_hermite.c

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

145 146 147 148 149 150 151 152

"hmain.dat" in 11

Page 263: Métodos Numéricos en Física

¿Cuál es el limite?main_sf_hermite.c

-0.2

-0.15

-0.1

-0.05

0

0.05

0.1

0.15

148 148.5 149 149.5 150 150.5 151 151.5 152

"hmain.dat" in 12

Page 264: Métodos Numéricos en Física

Economizar.sf_hermite_array.c

Si uno necesita no solo una función Hn(x) para un n, sino un setn = 0, . . . ,N −1 para un valor de x , es mejor guardarlas en un vector:

6 #define LN_SQRT_PI (0.5 * log(M_PI))7

8 /*! Calculates Hermite array h[0], h[1], ... ,h[nmax-1]9 for the x value given. */

10 void hermite_array(double* h, int nmax, double x)11 12 int n;13 long double g, g_old, g_new;14

15 g_old = 0.0;16 g = expl(- 0.5 * (x * x + LN_SQRT_PI));17 h[0] = (double)g;18 if (nmax > 1) 19 for (n = 1; n < nmax; n++) 20 g_new = sqrt(2.0/n) * x * g - sqrt(1.0 - 1.0/n) * g_old;21 g_old = g;22 g = g_new;23 h[n] = (double)g;24 25 26

Page 265: Métodos Numéricos en Física

Soluciones de una recursión.

Tenemos una recursión dada como:

yn+1 + anyn + bnyn−1 = 0

donde an y bn son algunos coeficientes.

Lamentablemente esta recursión tiene dos soluciones!Digamos las soluciones son fn y gn.Se puede calcular la recursión en dos direcciones:

positiva de n = 0 hasta n = Nnegativa de n = N hasta n = 0

En cada dirección una de las soluciones aumentaexponencialmente!Hay que elegir la dirección correcta para obtener la solucióndeseada!

Page 266: Métodos Numéricos en Física

Soluciones de una recursión.

Tenemos una recursión dada como:

yn+1 + anyn + bnyn−1 = 0

donde an y bn son algunos coeficientes.

Lamentablemente esta recursión tiene dos soluciones!Digamos las soluciones son fn y gn.Se puede calcular la recursión en dos direcciones:

positiva de n = 0 hasta n = Nnegativa de n = N hasta n = 0

En cada dirección una de las soluciones aumentaexponencialmente!Hay que elegir la dirección correcta para obtener la solucióndeseada!

Page 267: Métodos Numéricos en Física

Soluciones de una recursión.

Tenemos una recursión dada como:

yn+1 + anyn + bnyn−1 = 0

donde an y bn son algunos coeficientes.

Lamentablemente esta recursión tiene dos soluciones!Digamos las soluciones son fn y gn.Se puede calcular la recursión en dos direcciones:

positiva de n = 0 hasta n = Nnegativa de n = N hasta n = 0

En cada dirección una de las soluciones aumentaexponencialmente!Hay que elegir la dirección correcta para obtener la solucióndeseada!

Page 268: Métodos Numéricos en Física

Soluciones de una recursión.

Tenemos una recursión dada como:

yn+1 + anyn + bnyn−1 = 0

donde an y bn son algunos coeficientes.

Lamentablemente esta recursión tiene dos soluciones!Digamos las soluciones son fn y gn.Se puede calcular la recursión en dos direcciones:

positiva de n = 0 hasta n = Nnegativa de n = N hasta n = 0

En cada dirección una de las soluciones aumentaexponencialmente!Hay que elegir la dirección correcta para obtener la solucióndeseada!

Page 269: Métodos Numéricos en Física

Ejemplo: Función de Bessel.La función de Bessel Jn(x) tiene la recursión:

yn+1 − 2anyn + yn−1 = 0, an =nx

¿Es estable?Se hace la aproximación: an → a = const:

yn+1 − 2ayn + yn−1 = 0

Idéa para una solución: yn = bn:

b2 − 2ab + 1 = 0

entonces dos soluciones:

b = a±√

a2 − 1

Recursión es estable para n = 0 → N (dirección positiva) si|b| ≤ 1, lo cual es posible solamente si |a| ≤ 1.Como an = n/x eso significa:

n ≤ x

Problemas con n largo!

Page 270: Métodos Numéricos en Física

Ejemplo: Función de Bessel.La función de Bessel Jn(x) tiene la recursión:

yn+1 − 2anyn + yn−1 = 0, an =nx

¿Es estable?Se hace la aproximación: an → a = const:

yn+1 − 2ayn + yn−1 = 0

Idéa para una solución: yn = bn:

b2 − 2ab + 1 = 0

entonces dos soluciones:

b = a±√

a2 − 1

Recursión es estable para n = 0 → N (dirección positiva) si|b| ≤ 1, lo cual es posible solamente si |a| ≤ 1.Como an = n/x eso significa:

n ≤ x

Problemas con n largo!

Page 271: Métodos Numéricos en Física

Ejemplo: Función de Bessel.La función de Bessel Jn(x) tiene la recursión:

yn+1 − 2anyn + yn−1 = 0, an =nx

¿Es estable?Se hace la aproximación: an → a = const:

yn+1 − 2ayn + yn−1 = 0

Idéa para una solución: yn = bn:

b2 − 2ab + 1 = 0

entonces dos soluciones:

b = a±√

a2 − 1

Recursión es estable para n = 0 → N (dirección positiva) si|b| ≤ 1, lo cual es posible solamente si |a| ≤ 1.Como an = n/x eso significa:

n ≤ x

Problemas con n largo!

Page 272: Métodos Numéricos en Física

Ejemplo: Función de Bessel.La función de Bessel Jn(x) tiene la recursión:

yn+1 − 2anyn + yn−1 = 0, an =nx

¿Es estable?Se hace la aproximación: an → a = const:

yn+1 − 2ayn + yn−1 = 0

Idéa para una solución: yn = bn:

b2 − 2ab + 1 = 0

entonces dos soluciones:

b = a±√

a2 − 1

Recursión es estable para n = 0 → N (dirección positiva) si|b| ≤ 1, lo cual es posible solamente si |a| ≤ 1.Como an = n/x eso significa:

n ≤ x

Problemas con n largo!

Page 273: Métodos Numéricos en Física

Estabilidad para polinomiales de Hermite.La recursión es:

yn+1 − x

√2

n + 1︸ ︷︷ ︸=an

yn +

√n

n + 1︸ ︷︷ ︸≈1

yn−1 = 0

Aproximación: an → a = const:

yn+1 − ayn + yn−1 = 0

Solución: de yn = bn sale b2 − ab + 1 = 0 y entonces tenemosdos soluciones:

b =a2±√(a

2

)2− 1

Estable para n = 0 → N solamente si |b| ≤ 1 y entonces |a| ≤ 2.Con an = x

√2/(n + 1) sale la condición:

|x | ≤√

2(n + 1)

Esta bien porque el ultimo peak es donde x ∼ ±√

2n.

Page 274: Métodos Numéricos en Física

Estabilidad para polinomiales de Hermite.La recursión es:

yn+1 − x

√2

n + 1︸ ︷︷ ︸=an

yn +

√n

n + 1︸ ︷︷ ︸≈1

yn−1 = 0

Aproximación: an → a = const:

yn+1 − ayn + yn−1 = 0

Solución: de yn = bn sale b2 − ab + 1 = 0 y entonces tenemosdos soluciones:

b =a2±√(a

2

)2− 1

Estable para n = 0 → N solamente si |b| ≤ 1 y entonces |a| ≤ 2.Con an = x

√2/(n + 1) sale la condición:

|x | ≤√

2(n + 1)

Esta bien porque el ultimo peak es donde x ∼ ±√

2n.

Page 275: Métodos Numéricos en Física

Estabilidad para polinomiales de Hermite.La recursión es:

yn+1 − x

√2

n + 1︸ ︷︷ ︸=an

yn +

√n

n + 1︸ ︷︷ ︸≈1

yn−1 = 0

Aproximación: an → a = const:

yn+1 − ayn + yn−1 = 0

Solución: de yn = bn sale b2 − ab + 1 = 0 y entonces tenemosdos soluciones:

b =a2±√(a

2

)2− 1

Estable para n = 0 → N solamente si |b| ≤ 1 y entonces |a| ≤ 2.Con an = x

√2/(n + 1) sale la condición:

|x | ≤√

2(n + 1)

Esta bien porque el ultimo peak es donde x ∼ ±√

2n.

Page 276: Métodos Numéricos en Física

Estabilidad para polinomiales de Hermite.La recursión es:

yn+1 − x

√2

n + 1︸ ︷︷ ︸=an

yn +

√n

n + 1︸ ︷︷ ︸≈1

yn−1 = 0

Aproximación: an → a = const:

yn+1 − ayn + yn−1 = 0

Solución: de yn = bn sale b2 − ab + 1 = 0 y entonces tenemosdos soluciones:

b =a2±√(a

2

)2− 1

Estable para n = 0 → N solamente si |b| ≤ 1 y entonces |a| ≤ 2.Con an = x

√2/(n + 1) sale la condición:

|x | ≤√

2(n + 1)

Esta bien porque el ultimo peak es donde x ∼ ±√

2n.

Page 277: Métodos Numéricos en Física

Ecuación de Schrödinger.

Oscilador anarmonico con fuerza externa:

i~∂

∂t|ψ(t)〉 =

p2

2m+

mω2

2(x2 + ax4)+ xF (t)

|ψ(t)〉

Anarmonicidad aFuerza externa F (t)

Problema conocido con solucion analítica:(oscilador armónico)

i~∂

∂t|ψ(t)〉 =

p2

2m+

mω2x2

2

︸ ︷︷ ︸

=H0

|ψ(t)〉

Page 278: Métodos Numéricos en Física

Ecuación de Schrödinger.

Oscilador anarmonico con fuerza externa:

i~∂

∂t|ψ(t)〉 =

p2

2m+

mω2

2(x2 + ax4)+ xF (t)

|ψ(t)〉

Anarmonicidad aFuerza externa F (t)

Problema conocido con solucion analítica:(oscilador armónico)

i~∂

∂t|ψ(t)〉 =

p2

2m+

mω2x2

2

︸ ︷︷ ︸

=H0

|ψ(t)〉

Page 279: Métodos Numéricos en Física

Expansión en auto-soluciones del oscilador armónico.Para el oscilador armónico con Hamiltoniano

H0 =p2

2m+

mω2x2

2,

la solución es:

H0|n〉 = ~ωn|n〉, ωn = ω

(n +

12

), (n = 0,1, . . . ,∞)

donde

〈x |n〉 = φn(x) =Hn

(x/∆x0√

2

)√√

2π∆x02nn!e−(x/∆x0)

2/4 =Hn

(x/∆x0√

2

)√√

2∆x0

donde la varianza de |ψ0(x)|2 es dado por el largo

∆x0 =

√~

2mωUna expansión se puede hacer asi:

|ψ(t)〉 =∞∑

n=0

|n〉 〈n|ψ(t)〉︸ ︷︷ ︸=ψn(t)

=∞∑

n=0

ψn(t)|n〉

Page 280: Métodos Numéricos en Física

Expansión en auto-soluciones del oscilador armónico.Para el oscilador armónico con Hamiltoniano

H0 =p2

2m+

mω2x2

2,

la solución es:

H0|n〉 = ~ωn|n〉, ωn = ω

(n +

12

), (n = 0,1, . . . ,∞)

donde

〈x |n〉 = φn(x) =Hn

(x/∆x0√

2

)√√

2π∆x02nn!e−(x/∆x0)

2/4 =Hn

(x/∆x0√

2

)√√

2∆x0

donde la varianza de |ψ0(x)|2 es dado por el largo

∆x0 =

√~

2mωUna expansión se puede hacer asi:

|ψ(t)〉 =∞∑

n=0

|n〉 〈n|ψ(t)〉︸ ︷︷ ︸=ψn(t)

=∞∑

n=0

ψn(t)|n〉

Page 281: Métodos Numéricos en Física

En nuestro caso.

1 Expansión:

i~∂〈n|ψ(t)〉

∂t= 〈n|

p2

2m+

mω2

2(x2 + ax4)+ xF (t)

|ψ(t)〉

= 〈n|

H0 +mω2ax4

2+ xF (t)

|ψ(t)〉

= ~ωn〈n|ψ(t)〉+∞∑

m=0

〈n|

mω2ax4

2+ xF (t)

|m〉︸ ︷︷ ︸

=~Vn,m(t)

〈m|ψ(t)〉

2 Problema para resolver con ψn(t) = 〈n|ψ(t)〉: ecuacióndiferencial ordinaria

ddtψn(t) = −iωnψn(t)− i

∞∑m=0

Vn,m(t)ψm(t)

Page 282: Métodos Numéricos en Física

En nuestro caso.

1 Expansión:

i~∂〈n|ψ(t)〉

∂t= 〈n|

p2

2m+

mω2

2(x2 + ax4)+ xF (t)

|ψ(t)〉

= 〈n|

H0 +mω2ax4

2+ xF (t)

|ψ(t)〉

= ~ωn〈n|ψ(t)〉+∞∑

m=0

〈n|

mω2ax4

2+ xF (t)

|m〉︸ ︷︷ ︸

=~Vn,m(t)

〈m|ψ(t)〉

2 Problema para resolver con ψn(t) = 〈n|ψ(t)〉: ecuacióndiferencial ordinaria

ddtψn(t) = −iωnψn(t)− i

∞∑m=0

Vn,m(t)ψm(t)

Page 283: Métodos Numéricos en Física

Tiempo sin dimensión.

1 Usamos una frecuencia caracteristica ωc para definir el tiemposin dimensión:

τ = ωc t

2 Resulta nueva ecuación diferencial (ψn = dψn/dτ ):

ψn(τ) = −iω′nψn(τ)− i∞∑

m=0

V ′n,m(τ)ψm(τ)

donde

ω′n = ω′(n +12

), ω′ =ω

ωc

V ′n,m(τ) =

1ωc

Vn,m(τ)

Page 284: Métodos Numéricos en Física

Tiempo sin dimensión.

1 Usamos una frecuencia caracteristica ωc para definir el tiemposin dimensión:

τ = ωc t

2 Resulta nueva ecuación diferencial (ψn = dψn/dτ ):

ψn(τ) = −iω′nψn(τ)− i∞∑

m=0

V ′n,m(τ)ψm(τ)

donde

ω′n = ω′(n +12

), ω′ =ω

ωc

V ′n,m(τ) =

1ωc

Vn,m(τ)

Page 285: Métodos Numéricos en Física

Calculación de la matriz.

La matriz de perturbación (con respecto al oscilador armónico)es:

V ′n,m(τ) =

1~ωc

〈n|

mω2ax4

2+ xF (τ)

|m〉

Operadores de creación y destrucción de cuantas energeticasdel oscilador:

x = ∆x0(a + a†), p = i∆p0(a− a†), ∆x0∆p0 = ~/2

Asi H0 = ~ω(a†a + 12 ) y tenemos las relaciones:

a|n〉 =√

n|n − 1〉, a†|n〉 =√

n + 1|n + 1〉, [a, a†] = 1

La matriz es ahora:

V ′n,m(τ) =

mω2a2~ωc

(∆x0)4︸ ︷︷ ︸

=a′

〈n|(a† + a

)4 |m〉+F (τ)

~ωc∆x0︸ ︷︷ ︸

=F ′(τ)

〈n|(a† + a

)|m〉

Page 286: Métodos Numéricos en Física

Calculación de la matriz.

La matriz de perturbación (con respecto al oscilador armónico)es:

V ′n,m(τ) =

1~ωc

〈n|

mω2ax4

2+ xF (τ)

|m〉

Operadores de creación y destrucción de cuantas energeticasdel oscilador:

x = ∆x0(a + a†), p = i∆p0(a− a†), ∆x0∆p0 = ~/2

Asi H0 = ~ω(a†a + 12 ) y tenemos las relaciones:

a|n〉 =√

n|n − 1〉, a†|n〉 =√

n + 1|n + 1〉, [a, a†] = 1

La matriz es ahora:

V ′n,m(τ) =

mω2a2~ωc

(∆x0)4︸ ︷︷ ︸

=a′

〈n|(a† + a

)4 |m〉+F (τ)

~ωc∆x0︸ ︷︷ ︸

=F ′(τ)

〈n|(a† + a

)|m〉

Page 287: Métodos Numéricos en Física

Calculación de la matriz.

La matriz de perturbación (con respecto al oscilador armónico)es:

V ′n,m(τ) =

1~ωc

〈n|

mω2ax4

2+ xF (τ)

|m〉

Operadores de creación y destrucción de cuantas energeticasdel oscilador:

x = ∆x0(a + a†), p = i∆p0(a− a†), ∆x0∆p0 = ~/2

Asi H0 = ~ω(a†a + 12 ) y tenemos las relaciones:

a|n〉 =√

n|n − 1〉, a†|n〉 =√

n + 1|n + 1〉, [a, a†] = 1

La matriz es ahora:

V ′n,m(τ) =

mω2a2~ωc

(∆x0)4︸ ︷︷ ︸

=a′

〈n|(a† + a

)4 |m〉+F (τ)

~ωc∆x0︸ ︷︷ ︸

=F ′(τ)

〈n|(a† + a

)|m〉

Page 288: Métodos Numéricos en Física

Dimensiones de los coeficientes

1 Fuerza externa: [F (τ)∆x0] = J entonces fuerza sin dimensión:

F ′(τ) =F (τ)∆x0

~ωc

2 Anarmonicidad: [a] = m−2 entonces

a′ = amω2(∆x0)

4

2~ωc=

a4

2mω~︸ ︷︷ ︸

=(∆x0)−2

(∆x0)4 ω

ωc︸︷︷︸=ω′

=[a(∆x0)

2]ω′

4

3 Resulta matriz de perturbación:

V ′n,m(τ) = a′〈n|

(a† + a

)4 |m〉+ F ′(τ)〈n|(a† + a

)|m〉

Page 289: Métodos Numéricos en Física

Dimensiones de los coeficientes

1 Fuerza externa: [F (τ)∆x0] = J entonces fuerza sin dimensión:

F ′(τ) =F (τ)∆x0

~ωc

2 Anarmonicidad: [a] = m−2 entonces

a′ = amω2(∆x0)

4

2~ωc=

a4

2mω~︸ ︷︷ ︸

=(∆x0)−2

(∆x0)4 ω

ωc︸︷︷︸=ω′

=[a(∆x0)

2]ω′

4

3 Resulta matriz de perturbación:

V ′n,m(τ) = a′〈n|

(a† + a

)4 |m〉+ F ′(τ)〈n|(a† + a

)|m〉

Page 290: Métodos Numéricos en Física

Dimensiones de los coeficientes

1 Fuerza externa: [F (τ)∆x0] = J entonces fuerza sin dimensión:

F ′(τ) =F (τ)∆x0

~ωc

2 Anarmonicidad: [a] = m−2 entonces

a′ = amω2(∆x0)

4

2~ωc=

a4

2mω~︸ ︷︷ ︸

=(∆x0)−2

(∆x0)4 ω

ωc︸︷︷︸=ω′

=[a(∆x0)

2]ω′

4

3 Resulta matriz de perturbación:

V ′n,m(τ) = a′〈n|

(a† + a

)4 |m〉+ F ′(τ)〈n|(a† + a

)|m〉

Page 291: Métodos Numéricos en Física

Elementos de la matriz 1.Calcular 〈n|(a† + a)k |m〉 (k = 1, 4).

1 La primera matriz es:

〈n|(a† + a)|m〉 = 〈n|√

m + 1|m + 1〉+ 〈n|√

m|m − 1〉=

√nδn,m+1 +

√mδn,m−1

Son transiciones m → m ± 1.2 La segunda es más complicada (n = a†a):

〈n|(a† + a

)4 |m〉 = 〈n|

a†a† + aa + a†a + aa†︸ ︷︷ ︸=2n+1

2

|m〉

= 〈n|[(

a†a† + aa)2

+ (2n + 1)2 +(a†a† + aa

)(2n + 1)

]|m〉

+〈n|(2n + 1)(a†a† + aa

)|m〉

= 〈n|(a†a† + aa

)2 |m〉+ (2m + 1)2δn,m

+2(m + n + 1)〈n|(a†a† + aa

)|m〉

Page 292: Métodos Numéricos en Física

Elementos de la matriz 1.Calcular 〈n|(a† + a)k |m〉 (k = 1, 4).

1 La primera matriz es:

〈n|(a† + a)|m〉 = 〈n|√

m + 1|m + 1〉+ 〈n|√

m|m − 1〉=

√nδn,m+1 +

√mδn,m−1

Son transiciones m → m ± 1.2 La segunda es más complicada (n = a†a):

〈n|(a† + a

)4 |m〉 = 〈n|

a†a† + aa + a†a + aa†︸ ︷︷ ︸=2n+1

2

|m〉

= 〈n|[(

a†a† + aa)2

+ (2n + 1)2 +(a†a† + aa

)(2n + 1)

]|m〉

+〈n|(2n + 1)(a†a† + aa

)|m〉

= 〈n|(a†a† + aa

)2 |m〉+ (2m + 1)2δn,m

+2(m + n + 1)〈n|(a†a† + aa

)|m〉

Page 293: Métodos Numéricos en Física

Elementos de la matriz 2.Calcular 〈n|(a†a† + aa)k |m〉 (k = 1, 2).

1 Con k = 1 tenemos transiciones m → m ± 2:

= 〈n|√

(m + 2)(m + 1)|m + 2〉+ 〈n|√

(m − 1)m|m − 2〉

=

√n!

(n − 2)!δn,m+2 +

√m!

(m − 2)!δn,m−2

2 Para k = 2 son transiciones m → m,m ± 4:

= 〈n|(a†a†a†a† + aaaa + a†a†aa + aaa†a†)|m〉=

√(m + 4)(m + 3)(m + 2)(m + 1)δn,m+4

+√

(m − 3)(m − 2)(m − 1)mδn,m−4

+[m(m − 1) + (m + 2)(m + 1)]δn,m

=

√n!

(n − 4)!δn,m+4 +

√m!

(m − 4)!δn,m−4

+

[m!

(m − 2)!+

(m + 2)!

m!

]δn,m

Page 294: Métodos Numéricos en Física

Elementos de la matriz 2.Calcular 〈n|(a†a† + aa)k |m〉 (k = 1, 2).

1 Con k = 1 tenemos transiciones m → m ± 2:

= 〈n|√

(m + 2)(m + 1)|m + 2〉+ 〈n|√

(m − 1)m|m − 2〉

=

√n!

(n − 2)!δn,m+2 +

√m!

(m − 2)!δn,m−2

2 Para k = 2 son transiciones m → m,m ± 4:

= 〈n|(a†a†a†a† + aaaa + a†a†aa + aaa†a†)|m〉=

√(m + 4)(m + 3)(m + 2)(m + 1)δn,m+4

+√

(m − 3)(m − 2)(m − 1)mδn,m−4

+[m(m − 1) + (m + 2)(m + 1)]δn,m

=

√n!

(n − 4)!δn,m+4 +

√m!

(m − 4)!δn,m−4

+

[m!

(m − 2)!+

(m + 2)!

m!

]δn,m

Page 295: Métodos Numéricos en Física

Matriz de perturbación completa.

V ′n,m(τ) = 3a′ [2m(m + 1) + 1] δn,m

+ F ′(τ)(√

nδn,m+1 +√

mδn,m−1)

+ 2a′[(2n − 1)

√n!

(n − 2)!δn,m+2 + (2m − 1)

√m!

(m − 2)!δn,m−2

]

+ a′[√

n!

(n − 4)!δn,m+4 +

√m!

(m − 4)!δn,m−4

]

Page 296: Métodos Numéricos en Física

Calcular la función de onda.Queremos saber ψ(x , τ) = 〈x |ψ(τ)〉, o la densidad de probabilidad

p(x , τ) = |ψ(x , τ)|2

Expansion en auto-estados del oscilador armonico:

ψ(x , τ) = 〈x |ψ(τ)〉 =N−1∑n=0

〈x |n〉︸ ︷︷ ︸=φn(x)

〈n|ψ(τ)〉︸ ︷︷ ︸=ψn(τ)

Queremos todo sin dimensiones: t → τ = ωc tFalta solo x → ξ = x/(∆x0

√2):

p(x , τ)dx = p(ξ, τ)dξ

entonces:

p(ξ, τ) = p(x , τ)dxdξ

= ∆x0√

2p(x , τ) =

∣∣∣∣∣∣∣∣√√

2∆x0ψ(x , τ)︸ ︷︷ ︸=ψ(ξ,τ)

∣∣∣∣∣∣∣∣2

Page 297: Métodos Numéricos en Física

Calcular la función de onda.Queremos saber ψ(x , τ) = 〈x |ψ(τ)〉, o la densidad de probabilidad

p(x , τ) = |ψ(x , τ)|2

Expansion en auto-estados del oscilador armonico:

ψ(x , τ) = 〈x |ψ(τ)〉 =N−1∑n=0

〈x |n〉︸ ︷︷ ︸=φn(x)

〈n|ψ(τ)〉︸ ︷︷ ︸=ψn(τ)

Queremos todo sin dimensiones: t → τ = ωc tFalta solo x → ξ = x/(∆x0

√2):

p(x , τ)dx = p(ξ, τ)dξ

entonces:

p(ξ, τ) = p(x , τ)dxdξ

= ∆x0√

2p(x , τ) =

∣∣∣∣∣∣∣∣√√

2∆x0ψ(x , τ)︸ ︷︷ ︸=ψ(ξ,τ)

∣∣∣∣∣∣∣∣2

Page 298: Métodos Numéricos en Física

Calcular la función de onda.Queremos saber ψ(x , τ) = 〈x |ψ(τ)〉, o la densidad de probabilidad

p(x , τ) = |ψ(x , τ)|2

Expansion en auto-estados del oscilador armonico:

ψ(x , τ) = 〈x |ψ(τ)〉 =N−1∑n=0

〈x |n〉︸ ︷︷ ︸=φn(x)

〈n|ψ(τ)〉︸ ︷︷ ︸=ψn(τ)

Queremos todo sin dimensiones: t → τ = ωc tFalta solo x → ξ = x/(∆x0

√2):

p(x , τ)dx = p(ξ, τ)dξ

entonces:

p(ξ, τ) = p(x , τ)dxdξ

= ∆x0√

2p(x , τ) =

∣∣∣∣∣∣∣∣√√

2∆x0ψ(x , τ)︸ ︷︷ ︸=ψ(ξ,τ)

∣∣∣∣∣∣∣∣2

Page 299: Métodos Numéricos en Física

Auto-soluciones sin dimensión.

Nueva función de onda es (x = ∆x0√

2ξ):

ψ(ξ, τ) =

√√2∆x0ψ(x , τ) =

N−1∑n=0

√√2∆x0φn(∆x0

√2ξ)︸ ︷︷ ︸

=φn(ξ)

ψn(τ)

Tenemos ahora la auto-solución:

φn(ξ) =

√√2∆x0〈∆x0

√2ξ|n〉

=

√√2∆x0

1√√2∆x0

Hn

(∆x0

√2ξ

∆x0√

2

)= Hn(ξ)

Page 300: Métodos Numéricos en Física

Auto-soluciones sin dimensión.

Nueva función de onda es (x = ∆x0√

2ξ):

ψ(ξ, τ) =

√√2∆x0ψ(x , τ) =

N−1∑n=0

√√2∆x0φn(∆x0

√2ξ)︸ ︷︷ ︸

=φn(ξ)

ψn(τ)

Tenemos ahora la auto-solución:

φn(ξ) =

√√2∆x0〈∆x0

√2ξ|n〉

=

√√2∆x0

1√√2∆x0

Hn

(∆x0

√2ξ

∆x0√

2

)= Hn(ξ)

Page 301: Métodos Numéricos en Física

Clenshaw para ψ(ξ, τ).Hay que calcular ψ(ξ, τ) =

Pn Hn(ξ)ψn(τ).

1 Tenemos una recursión para Hn(ξ):

Hn+1(ξ) = ξ

√2

n + 1︸ ︷︷ ︸=αn(ξ)

Hn(ξ)−√

nn + 1︸ ︷︷ ︸=βn

Hn−1(ξ)

2 Nueva función (n = N − 1, . . . ,0):

hn(ξ, τ) = αn(ξ)hn+1(ξ, τ) + βn+1hn+1(ξ, τ) + ψn(τ)

Corresponde a

hn(ξ, τ) = ξ

√2

n + 1hn+1(ξ, τ)−

√n + 1n + 2

hn+2(ξ, τ) + ψn(τ)

3 Solución es:

ψ(ξ, τ) = h0(ξ, τ)H0(ξ) + h1(ξ, τ)[H1(ξ)− α0(ξ)H0(ξ)

]︸ ︷︷ ︸

=0

= h0(ξ, τ)H0(ξ)

= h0(ξ, τ)π− 1

4 e−ξ2/2

Page 302: Métodos Numéricos en Física

Clenshaw para ψ(ξ, τ).Hay que calcular ψ(ξ, τ) =

Pn Hn(ξ)ψn(τ).

1 Tenemos una recursión para Hn(ξ):

Hn+1(ξ) = ξ

√2

n + 1︸ ︷︷ ︸=αn(ξ)

Hn(ξ)−√

nn + 1︸ ︷︷ ︸=βn

Hn−1(ξ)

2 Nueva función (n = N − 1, . . . ,0):

hn(ξ, τ) = αn(ξ)hn+1(ξ, τ) + βn+1hn+1(ξ, τ) + ψn(τ)

Corresponde a

hn(ξ, τ) = ξ

√2

n + 1hn+1(ξ, τ)−

√n + 1n + 2

hn+2(ξ, τ) + ψn(τ)

3 Solución es:

ψ(ξ, τ) = h0(ξ, τ)H0(ξ) + h1(ξ, τ)[H1(ξ)− α0(ξ)H0(ξ)

]︸ ︷︷ ︸

=0

= h0(ξ, τ)H0(ξ)

= h0(ξ, τ)π− 1

4 e−ξ2/2

Page 303: Métodos Numéricos en Física

Clenshaw para ψ(ξ, τ).Hay que calcular ψ(ξ, τ) =

Pn Hn(ξ)ψn(τ).

1 Tenemos una recursión para Hn(ξ):

Hn+1(ξ) = ξ

√2

n + 1︸ ︷︷ ︸=αn(ξ)

Hn(ξ)−√

nn + 1︸ ︷︷ ︸=βn

Hn−1(ξ)

2 Nueva función (n = N − 1, . . . ,0):

hn(ξ, τ) = αn(ξ)hn+1(ξ, τ) + βn+1hn+1(ξ, τ) + ψn(τ)

Corresponde a

hn(ξ, τ) = ξ

√2

n + 1hn+1(ξ, τ)−

√n + 1n + 2

hn+2(ξ, τ) + ψn(τ)

3 Solución es:

ψ(ξ, τ) = h0(ξ, τ)H0(ξ) + h1(ξ, τ)[H1(ξ)− α0(ξ)H0(ξ)

]︸ ︷︷ ︸

=0

= h0(ξ, τ)H0(ξ)

= h0(ξ, τ)π− 1

4 e−ξ2/2

Page 304: Métodos Numéricos en Física

Implementación.de_wavefunc.c

5 #include <math.h>6 #include <complex.h>7 #include <stdlib.h>8

9 #define LN_SQRT_PI (0.5 * log(M_PI))10

11 /*! Calculates the wavefunction at (dimensionless) position12 ’x’ for the state being encoded by harmonic-oscillator13 coeficients ’psi’. */14 complex double wavefunction(double x, complex double* psi, size_t sz)15 16 complex double y_old, y, y_new;17

18 y_old = 0.0 + 0.0i;19 y = 0.0 + 0.0i;20 do 21 y_new = x * sqrt(2.0 / sz) * y - sqrt(1.0-1.0/(sz+1.0)) * y_old22 + psi[--sz];23 y_old = y;24 y = y_new;25 while (sz > 0);26 return y * exp(-0.5 * (x * x + LN_SQRT_PI));27

Page 305: Métodos Numéricos en Física

Programa.main_de_wavefunc.c

6 #include <stdlib.h>7 #include <stdio.h>8 #include <math.h>9 #include <complex.h>

10

11 #define SZ 20012 #define A 0.0213 #define F 0.014 #define OMEGA_F 1.015 #define R 2.016 #define PHI (0.1 * M_PI)17

18 /* for printing */19 #define X 7.020 #define N 15021

22 double poisson(double, double);23 complex double wavefunction(double x, complex double*, size_t);24 int de_solve_cpx(complex double*, size_t, double, double, double, double,25 void (*)(complex double*, complex double*, double));

Page 306: Métodos Numéricos en Física

Programa.main_de_wavefunc.c

27 /*! Calculates initial state as coherent state of28 amplitude R * exp(I*PHI). */29 void calc_ini(complex double* psi)30 31 size_t n;32 double res, tmp;33

34 res = 0.0;35 for (n = 0; n < SZ; n++) 36 psi[n] = cexp(n * PHI * I) * sqrt(poisson(n, R*R));37 tmp = cabs(psi[n]);38 res += tmp * tmp;39 40 if (fabs(res-1.0) > 1.0e-5)41 fprintf(stderr, "R too large!\n");42

Page 307: Métodos Numéricos en Física

Programa.main_de_wavefunc.c

44 /*! Calculates the external force of the form45 F * cos(OMEGA_F * t). */46 double force(double t)47 48 return F * cos(OMEGA_F * t);49

Page 308: Métodos Numéricos en Física

Programa.main_de_wavefunc.c

51 void f(complex double *dpsidt, complex double *psi, double t)52 53 size_t n;54 /* all is rotating with exp[-i (0.5 + 3.0 * A)t] */55 for (n = 0; n < SZ; n++) 56 dpsidt[n] = - I * ( (n + 6.0 * A * n * (n+1.0)) * psi[n]57 + ((n < 1) ? 0.0 : ( force(t) * sqrt(n) * psi[n-1] ))58 + ((n < 2) ? 0.0 : ( 2.0 * A * (2.0 * n - 1.0) * sqrt(n * (n-1.0)) * psi[n-2]))59 + ((n < 4) ? 0.0 : (A * sqrt(n * (n-1.0) * (n-2.0) * (n-3.0)) * psi[n-4]))60 + ((n > (SZ-5)) ? 0.0 : (A * sqrt((n+4.0) * (n+3.0) * (n+2.0) * (n+1.0)) * psi[n+4]))61 + ((n > (SZ-3)) ? 0.0 : (2.0 * A * (2.0 * n + 3.0) * sqrt((n+2.0) * (n+1.0)) * psi[n+2]))62 + ((n > (SZ-2)) ? 0.0 : ( force(t) * sqrt(n+1) * psi[n+1])) );63 64

Page 309: Métodos Numéricos en Física

Programa.main_de_wavefunc.c

66 /*! Checks for overflow problems in the state vector. */67 int overflow(complex double* psi, unsigned offset, double limit)68 69 size_t n;70 double tmp;71

72 for (n = SZ-offset-1; n < SZ; n++) 73 tmp = cabs(psi[n]);74 limit -= tmp * tmp;75 76 return ((limit < 0.0) ? 1 : 0);77

Page 310: Métodos Numéricos en Física

Programa.main_de_wavefunc.c

79 /*! Calculates the norm of the state. */80 double norm(complex double* psi)81 82 size_t n;83 double res, tmp;84

85 res = 0.0;86 for (n = 0; n < SZ; n++) 87 tmp = cabs(psi[n]);88 res += tmp * tmp;89 90 return res;91

Page 311: Métodos Numéricos en Física

Programa.main_de_wavefunc.c

93 /*! Prints the modulus square of the wavefunction. */94 void print_probability(complex double* psi)95 96 double x, dx, prob;97 complex double psix;98 int i;99

100 dx = 2.0 * X / N;101 x = -X;102 for (i = 0; i < N; i++) 103 psix = wavefunction(x, psi, SZ);104 prob = cabs(psix);105 prob *= prob;106 printf("%f %f\n", x, prob);107 x += dx;108 109 printf("\n\n\n");110

Page 312: Métodos Numéricos en Física

Programa.main_de_wavefunc.c

113 int main(void)114 115 complex double psi[SZ];116 double t, tmax, tstep, tmp;117 int min_cnt;118

119 tmax = 24.0;120 tstep = 0.05;121

122 calc_ini(psi);123 for (t = 0; t < tmax; t += tstep) 124 printf("# t = %f\n", t);125 print_probability(psi);126 min_cnt = de_solve_cpx(psi, SZ, t, t+tstep, 1.0e-7, 1.0e-10, f);127 if (min_cnt != 0)128 fprintf(stderr, "# at t = %f, (# of counts of h < hmin) = %d\n", t, min_cnt);129 if (overflow(psi, 10, 0.01))130 fprintf(stderr, "# at t = %f, population in last 10 levels too high!\n", t);131 tmp = norm(psi);132 if (fabs(tmp-1.0) > 1.0e-5)133 fprintf(stderr, "# at t = %f, norm = %f\n", t, tmp);134 135 return 0;136

Page 313: Métodos Numéricos en Física

Animación en GNUplot.1 #GNUPLOT ANIMATION2 cd "../dat"3 unset key4 set xlabel "x"5 set ylabel "p(x,t)"6 set yrange [0:1.0]7 #set term postscript eps color enhanced8 pause 0.2; plot "wavefuncmain.dat" in 0 with lin lw 39 pause 0.2; plot "wavefuncmain.dat" in 1 with lin lw 3

10 pause 0.2; plot "wavefuncmain.dat" in 2 with lin lw 311 pause 0.2; plot "wavefuncmain.dat" in 3 with lin lw 312 pause 0.2; plot "wavefuncmain.dat" in 4 with lin lw 313 pause 0.2; plot "wavefuncmain.dat" in 5 with lin lw 314 pause 0.2; plot "wavefuncmain.dat" in 6 with lin lw 315 pause 0.2; plot "wavefuncmain.dat" in 7 with lin lw 316 pause 0.2; plot "wavefuncmain.dat" in 8 with lin lw 317 pause 0.2; plot "wavefuncmain.dat" in 9 with lin lw 318 pause 0.2; plot "wavefuncmain.dat" in 10 with lin lw 319 pause 0.2; plot "wavefuncmain.dat" in 11 with lin lw 320 pause 0.2; plot "wavefuncmain.dat" in 12 with lin lw 321 pause 0.2; plot "wavefuncmain.dat" in 13 with lin lw 322 pause 0.2; plot "wavefuncmain.dat" in 14 with lin lw 323 pause 0.2; plot "wavefuncmain.dat" in 15 with lin lw 324 pause 0.2; plot "wavefuncmain.dat" in 16 with lin lw 3

Page 314: Métodos Numéricos en Física

Espacio de fase en la mecanica cuántica.

Como x y p no conmutan, no es posible especificar el estado físicodel sistema con un punto (x ,p) en el espacio de fase!Eso significa:

¿Espacio de fase no existe?¿Espacio de fase existe, pero no sabemos como esta definido?¿La distribución en en espacio de fase no es una probabilidadsino una casi-probabilidad?

Page 315: Métodos Numéricos en Física

Espacio de fase en la mecanica cuántica.

Como x y p no conmutan, no es posible especificar el estado físicodel sistema con un punto (x ,p) en el espacio de fase!Eso significa:

¿Espacio de fase no existe?¿Espacio de fase existe, pero no sabemos como esta definido?¿La distribución en en espacio de fase no es una probabilidadsino una casi-probabilidad?

Page 316: Métodos Numéricos en Física

Espacio de fase en la mecanica cuántica.

Como x y p no conmutan, no es posible especificar el estado físicodel sistema con un punto (x ,p) en el espacio de fase!Eso significa:

¿Espacio de fase no existe?¿Espacio de fase existe, pero no sabemos como esta definido?¿La distribución en en espacio de fase no es una probabilidadsino una casi-probabilidad?

Page 317: Métodos Numéricos en Física

Espacio de fase en la mecanica cuántica.

Como x y p no conmutan, no es posible especificar el estado físicodel sistema con un punto (x ,p) en el espacio de fase!Eso significa:

¿Espacio de fase no existe?¿Espacio de fase existe, pero no sabemos como esta definido?¿La distribución en en espacio de fase no es una probabilidadsino una casi-probabilidad?

Page 318: Métodos Numéricos en Física

Espacio de fase y estados coherentes.

Tenemos los operadores del oscilador armónico:

x = ∆x0(a† + a), p = i∆p0(a† − a)

Un estado coherente es algo que oscilla como un osciladorarmónico:

|γ〉 =∞∑

n=0

γn√

n!e−|γ|

2/2

Son auto-estados del operador de destrucción:

a|γ〉 = γ|γ〉

Idéa:<(γ) ∼ x , =(γ) ∼ p → espacio de fase

Falta solamente la probabilidad para estar en el estado |γ〉:

Pγ = |〈γ|ψ〉|2

Page 319: Métodos Numéricos en Física

Espacio de fase y estados coherentes.

Tenemos los operadores del oscilador armónico:

x = ∆x0(a† + a), p = i∆p0(a† − a)

Un estado coherente es algo que oscilla como un osciladorarmónico:

|γ〉 =∞∑

n=0

γn√

n!e−|γ|

2/2

Son auto-estados del operador de destrucción:

a|γ〉 = γ|γ〉

Idéa:<(γ) ∼ x , =(γ) ∼ p → espacio de fase

Falta solamente la probabilidad para estar en el estado |γ〉:

Pγ = |〈γ|ψ〉|2

Page 320: Métodos Numéricos en Física

Espacio de fase y estados coherentes.

Tenemos los operadores del oscilador armónico:

x = ∆x0(a† + a), p = i∆p0(a† − a)

Un estado coherente es algo que oscilla como un osciladorarmónico:

|γ〉 =∞∑

n=0

γn√

n!e−|γ|

2/2

Son auto-estados del operador de destrucción:

a|γ〉 = γ|γ〉

Idéa:<(γ) ∼ x , =(γ) ∼ p → espacio de fase

Falta solamente la probabilidad para estar en el estado |γ〉:

Pγ = |〈γ|ψ〉|2

Page 321: Métodos Numéricos en Física

Husimi Q.

Problema:

Dado: Coeficientes ψn = 〈n|ψ〉 del estado |ψ〉 en base deauto-estados |n〉 del oscilador armonico para n = 0, . . . ,N − 1.Queremos: Calcular la funcion Husimi Q

Q(γ) =1π|〈γ|ψ〉|2

Calculemos primero:

〈γ|ψ〉 = 〈γ|1|ψ〉 ≈ 〈γ|

(N−1∑n=0

|n〉〈n|

)|ψ〉 =

N−1∑n=0

φn(γ)ψn

donde φn(γ) = 〈γ|n〉 tiene una recursion.

Page 322: Métodos Numéricos en Física

Husimi Q.

Problema:

Dado: Coeficientes ψn = 〈n|ψ〉 del estado |ψ〉 en base deauto-estados |n〉 del oscilador armonico para n = 0, . . . ,N − 1.Queremos: Calcular la funcion Husimi Q

Q(γ) =1π|〈γ|ψ〉|2

Calculemos primero:

〈γ|ψ〉 = 〈γ|1|ψ〉 ≈ 〈γ|

(N−1∑n=0

|n〉〈n|

)|ψ〉 =

N−1∑n=0

φn(γ)ψn

donde φn(γ) = 〈γ|n〉 tiene una recursion.

Page 323: Métodos Numéricos en Física

Husimi Q.

Problema:

Dado: Coeficientes ψn = 〈n|ψ〉 del estado |ψ〉 en base deauto-estados |n〉 del oscilador armonico para n = 0, . . . ,N − 1.Queremos: Calcular la funcion Husimi Q

Q(γ) =1π|〈γ|ψ〉|2

Calculemos primero:

〈γ|ψ〉 = 〈γ|1|ψ〉 ≈ 〈γ|

(N−1∑n=0

|n〉〈n|

)|ψ〉 =

N−1∑n=0

φn(γ)ψn

donde φn(γ) = 〈γ|n〉 tiene una recursion.

Page 324: Métodos Numéricos en Física

Husimi Q.

Problema:

Dado: Coeficientes ψn = 〈n|ψ〉 del estado |ψ〉 en base deauto-estados |n〉 del oscilador armonico para n = 0, . . . ,N − 1.Queremos: Calcular la funcion Husimi Q

Q(γ) =1π|〈γ|ψ〉|2

Calculemos primero:

〈γ|ψ〉 = 〈γ|1|ψ〉 ≈ 〈γ|

(N−1∑n=0

|n〉〈n|

)|ψ〉 =

N−1∑n=0

φn(γ)ψn

donde φn(γ) = 〈γ|n〉 tiene una recursion.

Page 325: Métodos Numéricos en Física

Clenshaw para Husimi Q.Calcular 〈γ|ψ〉 =

PN−1n=0 φn(γ)ψn.

1 Recursion

φn+1(γ) =(γ∗)n+1√(n + 1)!

e−|γ|2/2 =

γ∗√n + 1︸ ︷︷ ︸

=αn(β)

φn(γ)

2 Clenshaw dice βn(γ) = 0, αn(γ) = γ∗/√

n + 1:

hn(γ) =γ∗√n + 1

hn+1(γ) + ψn, (n = N − 1, . . . ,0), hN(γ) = 0

3 Resultado:

〈γ|ψ〉 = h0(γ)φ0(γ) + h1(γ) [φ1(γ)− α0(γ)φ0(γ)]︸ ︷︷ ︸=0

= h0(γ)e−|γ|2/2

4 Husimi Q:

Q(γ) =1π|h0(γ)|2 e−|γ|

2

Page 326: Métodos Numéricos en Física

Clenshaw para Husimi Q.Calcular 〈γ|ψ〉 =

PN−1n=0 φn(γ)ψn.

1 Recursion

φn+1(γ) =(γ∗)n+1√(n + 1)!

e−|γ|2/2 =

γ∗√n + 1︸ ︷︷ ︸

=αn(β)

φn(γ)

2 Clenshaw dice βn(γ) = 0, αn(γ) = γ∗/√

n + 1:

hn(γ) =γ∗√n + 1

hn+1(γ) + ψn, (n = N − 1, . . . ,0), hN(γ) = 0

3 Resultado:

〈γ|ψ〉 = h0(γ)φ0(γ) + h1(γ) [φ1(γ)− α0(γ)φ0(γ)]︸ ︷︷ ︸=0

= h0(γ)e−|γ|2/2

4 Husimi Q:

Q(γ) =1π|h0(γ)|2 e−|γ|

2

Page 327: Métodos Numéricos en Física

Clenshaw para Husimi Q.Calcular 〈γ|ψ〉 =

PN−1n=0 φn(γ)ψn.

1 Recursion

φn+1(γ) =(γ∗)n+1√(n + 1)!

e−|γ|2/2 =

γ∗√n + 1︸ ︷︷ ︸

=αn(β)

φn(γ)

2 Clenshaw dice βn(γ) = 0, αn(γ) = γ∗/√

n + 1:

hn(γ) =γ∗√n + 1

hn+1(γ) + ψn, (n = N − 1, . . . ,0), hN(γ) = 0

3 Resultado:

〈γ|ψ〉 = h0(γ)φ0(γ) + h1(γ) [φ1(γ)− α0(γ)φ0(γ)]︸ ︷︷ ︸=0

= h0(γ)e−|γ|2/2

4 Husimi Q:

Q(γ) =1π|h0(γ)|2 e−|γ|

2

Page 328: Métodos Numéricos en Física

Clenshaw para Husimi Q.Calcular 〈γ|ψ〉 =

PN−1n=0 φn(γ)ψn.

1 Recursion

φn+1(γ) =(γ∗)n+1√(n + 1)!

e−|γ|2/2 =

γ∗√n + 1︸ ︷︷ ︸

=αn(β)

φn(γ)

2 Clenshaw dice βn(γ) = 0, αn(γ) = γ∗/√

n + 1:

hn(γ) =γ∗√n + 1

hn+1(γ) + ψn, (n = N − 1, . . . ,0), hN(γ) = 0

3 Resultado:

〈γ|ψ〉 = h0(γ)φ0(γ) + h1(γ) [φ1(γ)− α0(γ)φ0(γ)]︸ ︷︷ ︸=0

= h0(γ)e−|γ|2/2

4 Husimi Q:

Q(γ) =1π|h0(γ)|2 e−|γ|

2

Page 329: Métodos Numéricos en Física

Implementacion.de_husimi.c

1 /*! \file de_husimi.c */2

3 #define _XOPEN_SOURCE 5004 #define _ISOC99_SOURCE5

6 #include <math.h>7 #include <complex.h>8 #include <stdlib.h>

Page 330: Métodos Numéricos en Física

Implementacion.de_husimi.c

10 /*! Calculates the Husimi function Q(alpha) for the state psi11 given in harmonic-oscillator coeficients. */12 double husimiQ(complex double alpha, complex double* psi,13 size_t sz)14 15 complex double h_old, h;16 double aabs, habs;17

18 alpha = conj(alpha);19 h_old = 0.0 + 0.0i;20 do 21 h = h_old * alpha / sqrt(sz) + psi[--sz];22 h_old = h;23 while (sz > 0);24 aabs = cabs(alpha);25 habs = cabs(h);26 return habs * habs * exp(-aabs*aabs) / M_PI;27

Page 331: Métodos Numéricos en Física

Ejemplos.main_de_husimi.c

1 #include <stdlib.h>2 #include <stdio.h>3 #include <math.h>4 #include <complex.h>5

6 #define SZ 2007

8 /* for printing */9 #define X 6.0

10 #define P 6.011 #define N 10012

13 double poisson(double, double);14 double husimiQ(complex double, complex double*, size_t);

Page 332: Métodos Numéricos en Física

Ejemplos.main_de_husimi.c

16 void print_husimiQ(complex double* psi)17 18 double x, dx, p, dp, res;19 complex double alpha;20 int i, j;21

22 dx = 2.0 * X / N;23 dp = 2.0 * P / N;24 x = -X;25 for (i = 0; i < N; i++) 26 p = -P;27 for (j = 0; j < N; j++) 28 alpha = x + I * p;29 res = husimiQ(alpha, psi, SZ);30 printf("%f %f %f\n", x, p, res);31 p += dp;32 33 printf("\n");34 x += dx;35 36 printf("\n\n\n");37

Page 333: Métodos Numéricos en Física

Ejemplos.main_de_husimi.c

39 int main(void)40 41 complex double psi[SZ];42 double r, phi;43 int n;44

45 /* coherent state with complex amplitude r*exp(i*phi) */46 r = 2.0;47 phi = 0.25;48 for (n = 0; n < SZ; n++)49 psi[n] = cexp(I * n * phi) * sqrt(poisson(n, r*r));50 print_husimiQ(psi);51

52 /* number state n */53 for (n = 0; n < SZ; n++)54 psi[n] = 0.0 + 0.0i;55 psi[4] = 1.0;56 print_husimiQ(psi);57

58 return 0;59

Page 334: Métodos Numéricos en Física

Resultados.Auto estado |n = 4〉 y estado coherente |α = 2,0 × e0,25×i 〉.

0 0.01 0.02 0.03 0.04 0.05 0.06 0.07

−6 −4 −2 0 2 4 6−6

−4

−2

0

2

4

6

Re(α)

Im(α

)

Page 335: Métodos Numéricos en Física

Resultados.Auto estado |n = 4〉 y estado coherente |α = 2,0 × e0,25×i 〉.

0 0.05 0.1 0.15 0.2 0.25 0.3 0.35

−6 −4 −2 0 2 4 6−6

−4

−2

0

2

4

6

Im(α

)

Re(α)

Page 336: Métodos Numéricos en Física

Función Gamma incompleta.

Definición de la función Gamma incompleta:

γ(x ,a) =

∫ a

0dttx−1e−t

Conexión con la función de Gamma:

l«ıma→∞

γ(x ,a) =

∫ ∞

0dttx−1e−t = Γ(x)

Se definen usualmente también las siguentes funciones:

P(x ,a) =γ(x ,a)

Γ(x), Q(x ,a) = 1− P(x ,a)

¿Cómo se puede calcular esta función numericamente?

Page 337: Métodos Numéricos en Física

Aproximaciones para la función Gamma incompleta.

Para a ≤ x + 1 existe una aproximación en forma de unaexpansión:

γ(x ,a) = e−aax∞∑

n=0

Γ(x)

Γ(x + a + 1)an

Para a ≥ x + 1 se puede usar una razón continuada:

Γ(x ,a) = Γ(x) [1− P(x ,a)] = Γ(x)Q(x ,a) = Γ(x)− γ(x ,a)

= e−aax 1

a + 1− x − 1 · (1−x)

a+3−x− 2 · (2−x)a+5−x−...

Page 338: Métodos Numéricos en Física

Aproximaciones para la función Gamma incompleta.

Para a ≤ x + 1 existe una aproximación en forma de unaexpansión:

γ(x ,a) = e−aax∞∑

n=0

Γ(x)

Γ(x + a + 1)an

Para a ≥ x + 1 se puede usar una razón continuada:

Γ(x ,a) = Γ(x) [1− P(x ,a)] = Γ(x)Q(x ,a) = Γ(x)− γ(x ,a)

= e−aax 1

a + 1− x − 1 · (1−x)

a+3−x− 2 · (2−x)a+5−x−...

Page 339: Métodos Numéricos en Física

Definición.

Definición de una razón continuada:

f (x) = b0 +a1

b1 +a2

b2 +a3

b3 + · · ·

Notación común:

f (x) = b0 +a1

b1+

a2

b2+

a3

b3+· · ·

Aproximación hasta el orden n:

fn(x) = b0 +a1

b1+

a2

b2+

a3

b3+· · · an

bn

Page 340: Métodos Numéricos en Física

Definición.

Definición de una razón continuada:

f (x) = b0 +a1

b1 +a2

b2 +a3

b3 + · · ·

Notación común:

f (x) = b0 +a1

b1+

a2

b2+

a3

b3+· · ·

Aproximación hasta el orden n:

fn(x) = b0 +a1

b1+

a2

b2+

a3

b3+· · · an

bn

Page 341: Métodos Numéricos en Física

Recursión de Wallis.Del año 1655.

Idéa de Wallis:

fn =An

Bn

con la recursión:

Am = bmAm−1 + amAm−2

Bm = bmBm−1 + amBm−2

donde los valores iniciales son:

A−1 = 1, A0 = b0; B−1 = 0, B0 = 1

Problema:Posible UNDER-/OVERFLOW de los coeficientes Am y Bm!

Page 342: Métodos Numéricos en Física

Recursión de Wallis.Del año 1655.

Idéa de Wallis:

fn =An

Bn

con la recursión:

Am = bmAm−1 + amAm−2

Bm = bmBm−1 + amBm−2

donde los valores iniciales son:

A−1 = 1, A0 = b0; B−1 = 0, B0 = 1

Problema:Posible UNDER-/OVERFLOW de los coeficientes Am y Bm!

Page 343: Métodos Numéricos en Física

Recursión de Lentz.

Mejor usar razones:

Cm =Am

Am−1, Dm =

Bm−1

Bm

con la recursión:

Cm = bm +am

Cm−1, C0 = b0

Dm =1

bm + amDm−1, D0 = 0

Con eso la razón continuada resulta a través de unarecursión:

fm = fm−1CmDm, f0 = b0

Page 344: Métodos Numéricos en Física

Recursión de Lentz.

Mejor usar razones:

Cm =Am

Am−1, Dm =

Bm−1

Bm

con la recursión:

Cm = bm +am

Cm−1, C0 = b0

Dm =1

bm + amDm−1, D0 = 0

Con eso la razón continuada resulta a través de unarecursión:

fm = fm−1CmDm, f0 = b0

Page 345: Métodos Numéricos en Física

gamma_incomplete.c

1 #include <math.h>2 #include <float.h>3 #include <assert.h>4

5 #define EPS DBL_EPSILON6

7 double gamma_incomplete(double x, double a)8 9 double res, s, factor;

10 double b, a_inc, c, d;11 double log_gamma(double);12

13 assert((a >= 0.0) && (x > 0.0));14

15 if (a == 0.0)16 return 0.0;17 else 18 factor = exp(x * log(a) - a - log_gamma(x));19

20 if (a < (x+1.0)) /* series expansion */21 s = 1.0 / x;

Page 346: Métodos Numéricos en Física

gamma_incomplete.c

22 res = s;23 do 24 x += 1.0;25 s *= a / x;26 res += s;27 while (fabs(s) > fabs(res) * EPS);28 return res * factor;29 30

31 else /* continued fraction */32 a_inc = x - 3.0;33 x -= 1.0;34 b = a - x;35 c = 1.0 / DBL_MIN;

Page 347: Métodos Numéricos en Física

gamma_incomplete.c

36 d = 1.0 / b;37 res = d;38 do 39 b += 2.0;40 d = b + x * d;41 d = (fabs(d) < DBL_MIN) ? DBL_MIN : d;42 d = 1.0 / d;43 c = b + x/c;44 c = (fabs(c) < DBL_MIN) ? DBL_MIN : c;45 s = c * d;46 res *= s;47 x += a_inc;48 a_inc -= 2.0;49 while (fabs(s - 1.0) > EPS);50 return 1.0 - res * factor;51 52 53

Page 348: Métodos Numéricos en Física

Resultado.

0

0.2

0.4

0.6

0.8

1

0 2 4 6 8 10 12 14 16

P(x,a

)

a

x = 1

Page 349: Métodos Numéricos en Física

Resultado.

0

0.2

0.4

0.6

0.8

1

0 2 4 6 8 10 12 14 16

P(x,a

)

a

x = 1x = 2

Page 350: Métodos Numéricos en Física

Resultado.

0

0.2

0.4

0.6

0.8

1

0 2 4 6 8 10 12 14 16

P(x,a

)

a

x = 1x = 2x = 3

Page 351: Métodos Numéricos en Física

Resultado.

0

0.2

0.4

0.6

0.8

1

0 2 4 6 8 10 12 14 16

P(x,a

)

a

x = 10x = 3x = 2x = 1

Page 352: Métodos Numéricos en Física

Parte VInterpolación

Page 353: Métodos Numéricos en Física

Interpolación versus extrapolación.

Problema:

Dado: Datos xi , yi (i = 0, . . . ,N − 1) como resultados deuna calculación o de un experimento.

Pregunta: ¿Como se puede obtener valores y para x 6= xi(i = 0, . . . ,N − 1)?

x0 xN−1x1

y0

x

y

y1

Page 354: Métodos Numéricos en Física

Interpolación versus extrapolación.

Problema:

Dado: Datos xi , yi (i = 0, . . . ,N − 1) como resultados deuna calculación o de un experimento.

Pregunta: ¿Como se puede obtener valores y para x 6= xi(i = 0, . . . ,N − 1)?

Interpolación

x0 xN−1x1

y0

x

y

y1

Page 355: Métodos Numéricos en Física

Interpolación versus extrapolación.

Problema:

Dado: Datos xi , yi (i = 0, . . . ,N − 1) como resultados deuna calculación o de un experimento.

Pregunta: ¿Como se puede obtener valores y para x 6= xi(i = 0, . . . ,N − 1)?

ExtrapolaciónInterpolación

x0 xN−1x1

y0

x

y

y1

Page 356: Métodos Numéricos en Física

¿Para qué?

Limites en el tiempo:

Calculación de cada punto de dato necesita mucho tiempo.Podemos calcular numericamente solo un numero limitado dedatos.En el experimento solo tenemos un numero de realisacionessuficiente para un numero limitado de datos.

Objectivo de una interpolación:

Hacer plots bonitos (no tan importante).Aumentar la resolución de datos para uso en otros algoritmos(integración)!

Page 357: Métodos Numéricos en Física

Interpolación polinomial.Entre dos puntos de datos.

y

y0

x0 x1

x

P(x)

y1

Aproximación lineal entre N = 2 puntos:

P2(x) = y0 +y1 − y0

x1 − x0(x − x0) = y0

(x − x1)

(x0 − x1)+ y1

(x − x0)

(x1 − x0)

Es una función polinomial de orden 1.

Page 358: Métodos Numéricos en Física

Interpolación entre datos vecinos.

Interpolación polinomial de orden 1 entre datos vecinos:y

x

Desventajas:

P ′(x) tiene discontinuidades en cada punto de data!⇒ Solo acceptable para integración.

Page 359: Métodos Numéricos en Física

Interpolación entre datos vecinos.

Interpolación polinomial de orden 1 entre datos vecinos:

Discontinuidaden la derivativa!

y

x

Desventajas:

P ′(x) tiene discontinuidades en cada punto de data!⇒ Solo acceptable para integración.

Page 360: Métodos Numéricos en Física

Formula de Lagrange.

Para N = 2 datos tenemos una función polinomial de orden 1:

P2(x) = y0(x − x1)

(x0 − x1)+ y1

(x − x0)

(x1 − x0)

Solución de Lagrange:

Para N datos hay una función polinomial de orden N − 1:

PN(x) = y0(x − x1) · · · (x − xN−1)

(x0 − x1) · · · (x0 − xN−1)+ . . .

. . .+ yN−1(x − x0) · · · (x − xN−2)

(xN−1 − x0) · · · (xN−1 − xN−2)

Esta interpolación pasa cada punto de dato: P(xi) = yi

Page 361: Métodos Numéricos en Física

Formula de Lagrange.

Para N = 2 datos tenemos una función polinomial de orden 1:

P2(x) = y0(x − x1)

(x0 − x1)+ y1

(x − x0)

(x1 − x0)

Solución de Lagrange:

Para N datos hay una función polinomial de orden N − 1:

PN(x) = y0(x − x1) · · · (x − xN−1)

(x0 − x1) · · · (x0 − xN−1)+ . . .

. . .+ yN−1(x − x0) · · · (x − xN−2)

(xN−1 − x0) · · · (xN−1 − xN−2)

Esta interpolación pasa cada punto de dato: P(xi) = yi

Page 362: Métodos Numéricos en Física

Caracteristica de la interpolación polinomial.

0

0.5

1

1.5

2

2.5

3

0 1 2 3 4 5x

y

data

Page 363: Métodos Numéricos en Física

Caracteristica de la interpolación polinomial.

0

0.5

1

1.5

2

2.5

3

0 1 2 3 4 5

y

x

datan = 2

Page 364: Métodos Numéricos en Física

Caracteristica de la interpolación polinomial.

0

0.5

1

1.5

2

2.5

3

0 1 2 3 4 5

y

x

datan = 3

Page 365: Métodos Numéricos en Física

Caracteristica de la interpolación polinomial.

0

0.5

1

1.5

2

2.5

3

0 1 2 3 4 5

y

x

datan = 4

Page 366: Métodos Numéricos en Física

Caracteristica de la interpolación polinomial.

0

0.5

1

1.5

2

2.5

3

0 1 2 3 4 5

y

x

datan = 5

Page 367: Métodos Numéricos en Física

Caracteristica de la interpolación polinomial.

0

0.5

1

1.5

2

2.5

3

0 1 2 3 4 5

y

x

datan = 6

Page 368: Métodos Numéricos en Física

Interpolación para N datos a, . . . ,b.

x

y

xa xa+1 xbxb−1

ya

ya+1

Interpolación polinomial (Lagrange) entre los datos a, . . . ,b:

Pa,...,b(x) = ya(x − xa+1) · · · (x − xb)

(xa − xa+1) · · · (x0 − xb)+ . . .

. . .+ yb(x − xa) · · · (x − xb−1)

(xb − xa) · · · (xb − xb−1)

Page 369: Métodos Numéricos en Física

Recursión de Neville.

Recursión de Neville:

Pa,...,b(x) =x − xb

xa − xbPa,...,(b−1)(x) +

xa − xxa − xb

P(a+1),...,b(x)

Para la prueba formula de Lagrange en forma mas util:

Pa,...,b(x) = ya(x − xa+1) · · · (x − xb)

(xa − xa+1) · · · (xa − xb)+ . . .

. . .+ yb(x − xa) · · · (x − xb−1)

(xb − xa) · · · (xb − xb−1)

=b∑

m=a

ym

b∏n( 6=m)=a

(x − xn

xm − xn

)

Page 370: Métodos Numéricos en Física

Prueba de la recursión de Neville.Es correcto que F (x) = Pa,...,b(x)?

Segun Neville:

F (x) =x − xb

xa − xbPa,...,(b−1)(x) +

xa − xxa − xb

P(a+1),...,b(x)

Usando formula de Lagrange:

F (x) =x − xb

xa − xb

b−1∑m=a

ym

b−1∏n( 6=m)=a

(x − xn

xm − xn

)

+xa − xxa − xb

b∑m=a+1

ym

b∏n( 6=m)=a+1

(x − xn

xm − xn

)

Page 371: Métodos Numéricos en Física

Prueba de la recursión de Neville.Es correcto que F (x) = Pa,...,b(x)?

Segun Neville:

F (x) =x − xb

xa − xbPa,...,(b−1)(x) +

xa − xxa − xb

P(a+1),...,b(x)

Usando formula de Lagrange:

F (x) =x − xb

xa − xb

b−1∑m=a

ym

b−1∏n( 6=m)=a

(x − xn

xm − xn

)

+xa − xxa − xb

b∑m=a+1

ym

b∏n( 6=m)=a+1

(x − xn

xm − xn

)

Page 372: Métodos Numéricos en Física

Prueba de la recursión de Neville.Es correcto que F (x) = Pa,...,b(x)?

Sacar terminos con m = a,b respectivamente:

F (x) =x − xb

xa − xb

[ya

b−1∏n=a+1

(x − xn

xa − xn

)+

+b−1∑

m=a+1

ym

b−1∏n( 6=m)=a

(x − xn

xm − xn

)+

xa − xxa − xb

[yb

b−1∏n=a+1

(x − xn

xb − xn

)

+b−1∑

m=a+1

ym

b∏n( 6=m)=a+1

(x − xn

xm − xn

)

Page 373: Métodos Numéricos en Física

Prueba de la recursión de Neville.Es correcto que F (x) = Pa,...,b(x)?

Recombinación:

F (x) =b−1∑

m=a+1

ym

x − xb

xa − xb

b−1∏n( 6=m)=a

(x − xn

xm − xn

)

+xa − xxa − xb

b∏n( 6=m)=a+1

(x − xn

xm − xn

)+ ya

b∏n=a+1

(x − xn

xa − xn

)+ yb

b−1∏n=a

(x − xn

xb − xn

)Donde [. . .] podemos escribir como:

b−1∏n( 6=m)=a+1

(x − xn

xm − xn

)[x − xb

xa − xb

(x − xa

xm − xa

)+

xa − xxa − xb

(x − xb

xm − xb

)]

Page 374: Métodos Numéricos en Física

Prueba de la recursión de Neville.Es correcto que F (x) = Pa,...,b(x)?

Recombinación:

F (x) =b−1∑

m=a+1

ym

x − xb

xa − xb

b−1∏n( 6=m)=a

(x − xn

xm − xn

)

+xa − xxa − xb

b∏n( 6=m)=a+1

(x − xn

xm − xn

)+ ya

b∏n=a+1

(x − xn

xa − xn

)+ yb

b−1∏n=a

(x − xn

xb − xn

)Donde [. . .] podemos escribir como:

b−1∏n( 6=m)=a+1

(x − xn

xm − xn

)[x − xb

xa − xb

(x − xa

xm − xa

)+

xa − xxa − xb

(x − xb

xm − xb

)]

Page 375: Métodos Numéricos en Física

Prueba de la recursión de Neville.Es correcto que F (x) = Pa,...,b(x)?

Evaluación de la parentesis [. . .]:

=b−1∏

n( 6=m)=a+1

(x − xn

xm − xn

)(x − xa)(x − xb)

xa − xb

(1

xm − xa− 1

xm − xb

)

=b−1∏

n( 6=m)=a+1

(x − xn

xm − xn

)(x − xa)(x − xb)

(xm − xa)(xm − xb)

=b∏

n( 6=m)=a

(x − xn

xm − xn

)

Page 376: Métodos Numéricos en Física

Prueba de la recursión de Neville.Es correcto que F (x) = Pa,...,b(x)?

Entonces:

F (x) =b−1∑

m=a+1

ym

b∏n( 6=m)=a

(x − xn

xm − xn

)

+ ya

b∏n=a+1

(x − xn

xa − xn

)+ yb

b−1∏n=a

(x − xn

xb − xn

)

=b∑

m=a

ym

b∏n( 6=m)=a

(x − xn

xm − xn

)= Pa,...,b(x) q.e.d.

Page 377: Métodos Numéricos en Física

Aplicación para la interpolación.

Hacemos una interpolación usando 4 datos:

a b

a = 0, b = 3

x1x0 x2 x3

y

x

Recursión de Neville:

Pa,...,b(x) =x − xb

xa − xbPa,...,(b−1)(x) +

xa − xxa − xb

P(a+1),...,b(x)

Donde la interpolación con solo un dato es:

P0(x) = y0, . . . , P3(x) = y3

Page 378: Métodos Numéricos en Física

Recursión simple.x0 x1 x3x2

P1 P2 P3P0

Page 379: Métodos Numéricos en Física

Recursión simple.x0 x1 x3x2

P1 P2 P3

P0,1 P1,2 P2,3

P0

Page 380: Métodos Numéricos en Física

Recursión simple.x0 x1 x3x2

P1 P2 P3

P0,1 P1,2 P2,3

P0,1,2 P1,2,3

P0

Page 381: Métodos Numéricos en Física

Recursión simple.x0 x1 x3x2

P1 P2 P3

P0,1 P1,2 P2,3

P0,1,2 P1,2,3

P0

P0,1,2,3

Page 382: Métodos Numéricos en Física

Complejitud computacional.Formula de Lagrange.

Lagrange:

P0,...,N−1(x) = y0(x − x1) · · · (x − xN−1)

(x0 − x1) · · · (x0 − xN−1)+ . . .

. . .+ yN−1(x − x0) · · · (x − xN−2)

(xN−1 − x0) · · · (xN−1 − xN−2)

Para calcular se necesitan:

OpsLagrange = N × [2× (N − 1)]×⊕+ [2× (N − 2) + 2]×⊗= 4N(N − 1)

∼ 4× N2

Page 383: Métodos Numéricos en Física

Complejitud computacional.Recursion de Neville simple.

Neville:

OpsNeville = [(N − 1) + (N − 2) + . . .+ 2 + 1]

× [5×⊕+ 4×⊗]

=92

N(N − 1)

∼ 4,5× N2

Problemas:

Lagrange y Neville ambos van como N2!Ademas falta control de errores!

Page 384: Métodos Numéricos en Física

Complejitud computacional.Recursion de Neville simple.

Neville:

OpsNeville = [(N − 1) + (N − 2) + . . .+ 2 + 1]

× [5×⊕+ 4×⊗]

=92

N(N − 1)

∼ 4,5× N2

Problemas:

Lagrange y Neville ambos van como N2!Ademas falta control de errores!

Page 385: Métodos Numéricos en Física

Otra recursión.

Mejor usar diferencias:

R(n)a (x) = Pa,...,(a+n)(x)− Pa,...,(a+n−1)(x) ∼ xn

L(n)a (x) = Pa,...,(a+n)(x)− P(a+1),...,(a+n)(x) ∼ xn

Resulta otra recursión:

R(n+1)a (x) =

xa − xxa − xa+n+1

[R(n)

a+1(x)− L(n)a (x)

]L(n+1)

a (x) =x − xa+n+1

xa − xa+n+1

[L(n)

a (x)− R(n)a+1(x)

]con valores iniciales: R(0)

a (x) = L(0)a (x) = Pa(x) = ya

Page 386: Métodos Numéricos en Física

Otra recursión.

Mejor usar diferencias:

R(n)a (x) = Pa,...,(a+n)(x)− Pa,...,(a+n−1)(x) ∼ xn

L(n)a (x) = Pa,...,(a+n)(x)− P(a+1),...,(a+n)(x) ∼ xn

Resulta otra recursión:

R(n+1)a (x) =

xa − xxa − xa+n+1

[R(n)

a+1(x)− L(n)a (x)

]L(n+1)

a (x) =x − xa+n+1

xa − xa+n+1

[L(n)

a (x)− R(n)a+1(x)

]con valores iniciales: R(0)

a (x) = L(0)a (x) = Pa(x) = ya

Page 387: Métodos Numéricos en Física

Ventaja grande?Ejemplo para N = 4 datos:

x0 x1 x3x2

P2 P3

P0,1 P1,2 P2,3

P0,1,2 P1,2,3

P0

P0,1,2,3

x

P1 = L(0)1

Page 388: Métodos Numéricos en Física

Ventaja grande?Ejemplo para N = 4 datos:

x0 x1 x3x2

P3

P0,1 P1,2 P2,3

P0,1,2 P1,2,3

P0

P0,1,2,3

x

R(1)1

P1 = L(0)1 P2 = R(0)

2

Page 389: Métodos Numéricos en Física

Ventaja grande?Ejemplo para N = 4 datos:

x0 x1 x3x2

P3

P0,1 P1,2 P2,3

P0,1,2 P1,2,3

P0

P0,1,2,3

x

R(1)1L(1)

0

L(2)0

P1 = L(0)1 P2 = R(0)

2

Page 390: Métodos Numéricos en Física

Ventaja grande?Ejemplo para N = 4 datos:

x0 x1 x3x2

P3

P0,1 P1,2 P2,3

P0,1,2 P1,2,3

P0

P0,1,2,3

x

L(1)0 R(1)

1

L(2)0 R(2)

1

R(3)0

P1 = L(0)1 P2 = R(0)

2

Page 391: Métodos Numéricos en Física

Prueba.

F (x) = L(0)1 (x) + R(1)

1 (x) + L(2)0 (x) + R(3)

0 (x)

= P1(x)

+ [P1,2(x)− P1(x)]

+ [P0,1,2(x)− P1,2(x)]

+ [P0,1,2,3(x)− P0,1,2(x)]

= P0,1,2,3(x)

Hay muchos caminos posibles hacia el resultado!

¿Cual camino es lo mejor?

Idea:El camino lo mas recto es optimal para usar la ultima iteración comoestimación de error!

Page 392: Métodos Numéricos en Física

Prueba.

F (x) = L(0)1 (x) + R(1)

1 (x) + L(2)0 (x) + R(3)

0 (x)

= P1(x)

+ [P1,2(x)− P1(x)]

+ [P0,1,2(x)− P1,2(x)]

+ [P0,1,2,3(x)− P0,1,2(x)]

= P0,1,2,3(x)

Hay muchos caminos posibles hacia el resultado!

¿Cual camino es lo mejor?

Idea:El camino lo mas recto es optimal para usar la ultima iteración comoestimación de error!

Page 393: Métodos Numéricos en Física

Prueba.

F (x) = L(0)1 (x) + R(1)

1 (x) + L(2)0 (x) + R(3)

0 (x)

= P1(x)

+ [P1,2(x)− P1(x)]

+ [P0,1,2(x)− P1,2(x)]

+ [P0,1,2,3(x)− P0,1,2(x)]

= P0,1,2,3(x)

Hay muchos caminos posibles hacia el resultado!

¿Cual camino es lo mejor?

Idea:El camino lo mas recto es optimal para usar la ultima iteración comoestimación de error!

Page 394: Métodos Numéricos en Física

Complejitud computacional.Recursion de Neville inteligente.

Neville+:Para una interpolación polinomial de orden N se necesita usar soloN − 1 veces la recursión!?

OpsNeville+ = (N − 1)× [4×⊕+ 3×⊗]

= 7× (N − 1)

∼ 7× N

Error:

Para eso hay que saber el camino apropriado antes!Lamentablemente se necesitan también los otros coeficientes!Otra vez también es como ∝ N2!

Page 395: Métodos Numéricos en Física

Complejitud computacional.Recursion de Neville inteligente.

Neville+:Para una interpolación polinomial de orden N se necesita usar soloN − 1 veces la recursión!?

OpsNeville+ = (N − 1)× [4×⊕+ 3×⊗]

= 7× (N − 1)

∼ 7× N

Error:

Para eso hay que saber el camino apropriado antes!Lamentablemente se necesitan también los otros coeficientes!Otra vez también es como ∝ N2!

Page 396: Métodos Numéricos en Física

Implementación de Neville+.ip_neville.c

1 /*! \file ip_neville.c */2

3 #include <math.h>4 #include <assert.h>5 #include <stdlib.h>6

7 /*! Polynomial interpolation using the intelligent version8 of the algorithm of Neville (Neville+).9 \todo Can it actually be done in \f$\sim N\f$?

10 */11 double ip_neville(double xi, double* x, double* y, int n)12 13 double *r, *l;14 double diff, diff_min, yi;15 double dx_lo, dx_hi;16 int i, m, i_min;17

18 assert(n > 0);19

20 r = malloc(n * sizeof(double));21 l = malloc(n * sizeof(double));

Page 397: Métodos Numéricos en Física

Implementación de Neville+.ip_neville.c

23 diff_min = fabs(xi-x[0]);24 i_min = 0;25 for (i = 0; i < n; i++) 26 diff = fabs(xi-x[i]);27 if (diff < diff_min) 28 diff_min = diff;29 i_min = i;30 31 r[i] = y[i];32 l[i] = y[i];33 34 yi = y[i_min];35 for (m = 1; m < n; m++) 36 for (i = 0; i < n-m; i++) 37 dx_lo = x[i]-xi;38 dx_hi = x[i+m]-xi;39 diff = (r[i+1]-l[i]) / (x[i]-x[i+m]);40 r[i] = dx_lo * diff;41 l[i] = dx_hi * diff;42 43 yi += ( ((2*i_min) < (n-m)) ? r[i_min] : l[--i_min] );44

Page 398: Métodos Numéricos en Física

Implementación de Neville+.ip_neville.c

46 free(r);47 free(l);48 return yi;49

Page 399: Métodos Numéricos en Física

Interpolación local.

x

y

x0 x1 xN−1

y0

y1

Falta solo una cosa:Para una interpolación polinomial local de orden n hay que encontrarlos datos vecinos!

Page 400: Métodos Numéricos en Física

Interpolación local.

x

y x

y1

y0

x0 x1 xN−1

Falta solo una cosa:Para una interpolación polinomial local de orden n hay que encontrarlos datos vecinos!

Page 401: Métodos Numéricos en Física

Interpolación local.

x

y x

y1

y0

x0 x1 xN−1

Falta solo una cosa:Para una interpolación polinomial local de orden n hay que encontrarlos datos vecinos!

Page 402: Métodos Numéricos en Física

Interpolación local.

x

y x

y1

y0

x0 x1 xN−1

Falta solo una cosa:Para una interpolación polinomial local de orden n hay que encontrarlos datos vecinos!

Page 403: Métodos Numéricos en Física

Interpolación local.

x

y x

y1

y0

x0 x1 xN−1

Falta solo una cosa:Para una interpolación polinomial local de orden n hay que encontrarlos datos vecinos!

Page 404: Métodos Numéricos en Física

Buscar en una lista ordenada.

Definición del problema:

Dado: Lista ordenada de N datos x0, . . . , xN−1 (xi ≤ xi+1,i = 0, . . . ,N − 2) y un valor x .Problema: Cuales son los indices de los dos elementos xk yxk+1, que son los vecinos de x , es decir:

xk ≤ x < xk+1

Solución:

Metodo de bi-sección puede hacerlo en ∼ log2(N) pasos!Es mas eficiente que Neville+ (∼ N2) entonces no va a afectar laeficiencia total que va a ser ∼ N2.

Page 405: Métodos Numéricos en Física

Buscar en una lista ordenada.

Definición del problema:

Dado: Lista ordenada de N datos x0, . . . , xN−1 (xi ≤ xi+1,i = 0, . . . ,N − 2) y un valor x .Problema: Cuales son los indices de los dos elementos xk yxk+1, que son los vecinos de x , es decir:

xk ≤ x < xk+1

Solución:

Metodo de bi-sección puede hacerlo en ∼ log2(N) pasos!Es mas eficiente que Neville+ (∼ N2) entonces no va a afectar laeficiencia total que va a ser ∼ N2.

Page 406: Métodos Numéricos en Física

Metodo de bi-sección.ip_searchidx.c

1 /*! \file ip_searchidx.c */2

3 #include <assert.h>4

5 /*! Search index j with \f$x[j] <= x < x[j+1]\f$ in the6 monotonically-increasing ordered list7 \f$x[i+1] >= x[i]\f$. Done by the method of8 bisection. */9 int searchidx(double xi, double* x, int n)

10

11 12 int lo, hi, mid;13

14 assert((xi >= x[0]) && (xi <= x[n-1]));

Page 407: Métodos Numéricos en Física

Metodo de bi-sección.ip_searchidx.c

16 lo = 0;17 hi = n-1;18 do 19 mid = (lo+hi)/2;20 if (xi < x[mid])21 hi = mid;22 else23 lo = mid;24 while (hi-lo > 1);25 return lo;26

Page 408: Métodos Numéricos en Física

Interpolación polinomial local.ip_polylocal.c

1 /*! \file ip_polylocal.c */2

3 #include <assert.h>4

5 /*! Calculates a local polynomial interpolation using p6 neighboring data points in the vector of n data. */7 double ip_polylocal(double xi, int p, double* x, double* y,8 int n)9

10 int pos;11 int searchidx(double, double*, int);12 double ip_neville(double, double*, double*, int);13

14 assert((n > 0) && (xi >= x[0]) && (xi <= x[n-1]));15

16 pos = searchidx(xi, x, n) - p/2 + 1;17 pos = (pos < 0) ? 0 : pos; /* ensure pos >= 0 */18 pos = (pos > (n-p)) ? (n-p) : pos; /* ensure pos+p <= n */19 return ip_neville(xi, &(x[pos]), &(y[pos]), p);20

Page 409: Métodos Numéricos en Física

Ejemplo.main_ip_polylocal.c

1 #include <stdio.h>2

3 #define GAMMA 0.14 #define X0 0.05 #define N 206 #define XMAX 1.07 #define DX (2.0*XMAX/(N-1.0))8

9 double function(double x)10 11 return 1.0 / ((x-X0)*(x-X0) + GAMMA*GAMMA);12 13

14 double ip_neville(double, double*, double*, int);15 double ip_polylocal(double, int, double*, double*, int);

Page 410: Métodos Numéricos en Física

Ejemplo.main_ip_polylocal.c

17 int main(void)18 19 int n;20 double xi, yi, yi_local, ycorrect;21 double x[N], y[N];22

23 for (n = 0; n < N; n++) 24 x[n] = n * DX - XMAX;25 y[n] = function(x[n]);26 printf("%g %g\n", x[n], y[n]);27 28 printf("\n\n");29 for (xi = -XMAX; xi <= XMAX; xi += 0.005) 30 yi = ip_neville(xi, x, y, N);31 yi_local = ip_polylocal(xi, 4, x, y, N);32 ycorrect = function(xi);33 printf("%g %g %g %g\n", xi, ycorrect, yi, yi_local);34 35 return 0;36

Page 411: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

−1 −0.5 0 0.5 1

y

x

datafunción

Page 412: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

−1 −0.5 0 0.5 1

y

data

polynomialfunción

x

Page 413: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

−1 −0.5 0 0.5 1

datafunción

poly local (4)

x

y

Page 414: Métodos Numéricos en Física

Interpolación racional.

Interpolación con una función racional:

Dado: N datos (x0, y0), . . . , (xN−1, yN−1).Interpolación racional:

R(x) =Pm(x)

Qn(x)=

p0 + p1x + . . .+ pmxm

q0 + q1x + . . .qnxn

Los valores qi ,pi hay que eligir segun los datos.q0 se puede elegir arbitrariamente.(m + 1) + n ≥ N para adaptar la función a los N datos.

Page 415: Métodos Numéricos en Física

Interpolación racional diagonal.

Definición:

R(x) =p0 + p1x + . . .+ pmxm

q1x + . . .qnxn

La función racional de interpolación R(x) es diagonal para los Ndatos cuando:

(m + 1) + n = N

y también:

m + 1 = n si N es paresm = n si N es impares

Ventaja:

Se puede generar a través de una recursión de Burlisch-Stoer!

Page 416: Métodos Numéricos en Física

Interpolación racional diagonal.

Definición:

R(x) =p0 + p1x + . . .+ pmxm

q1x + . . .qnxn

La función racional de interpolación R(x) es diagonal para los Ndatos cuando:

(m + 1) + n = N

y también:

m + 1 = n si N es paresm = n si N es impares

Ventaja:

Se puede generar a través de una recursión de Burlisch-Stoer!

Page 417: Métodos Numéricos en Física

Recursión de Burlisch-Stoer.

Tenemos N = b − a + 1 datos (xa, ya), . . . , (xb, yb).La interpolación racional diagonal que contiene los puntosa, . . . ,b es Ra,...,b(x).

Recursión de Burlisch-Stoer:

Ra,...,b(x) = R(a+1),...,b(x) +R(a+1),...,b(x)− Ra,...,(b−1)(x)(

x−xax−xb

) [1− R(a+1),...,b(x)−Ra,...,(b−1)(x)

R(a+1),...,b(x)−R(a+1),...,(b−1)(x)

]Con valores iniciales: Ra(x) = ya

Con la definición: Rk,...,(k−1)(x) = 0.

Page 418: Métodos Numéricos en Física

Recursión de Burlisch-Stoer.

Tenemos N = b − a + 1 datos (xa, ya), . . . , (xb, yb).La interpolación racional diagonal que contiene los puntosa, . . . ,b es Ra,...,b(x).

Recursión de Burlisch-Stoer:

Ra,...,b(x) = R(a+1),...,b(x) +R(a+1),...,b(x)− Ra,...,(b−1)(x)(

x−xax−xb

) [1− R(a+1),...,b(x)−Ra,...,(b−1)(x)

R(a+1),...,b(x)−R(a+1),...,(b−1)(x)

]Con valores iniciales: Ra(x) = ya

Con la definición: Rk,...,(k−1)(x) = 0.

Page 419: Métodos Numéricos en Física

Recursión de Burlisch-Stoer.

Tenemos N = b − a + 1 datos (xa, ya), . . . , (xb, yb).La interpolación racional diagonal que contiene los puntosa, . . . ,b es Ra,...,b(x).

Recursión de Burlisch-Stoer:

Ra,...,b(x) = R(a+1),...,b(x) +R(a+1),...,b(x)− Ra,...,(b−1)(x)(

x−xax−xb

) [1− R(a+1),...,b(x)−Ra,...,(b−1)(x)

R(a+1),...,b(x)−R(a+1),...,(b−1)(x)

]Con valores iniciales: Ra(x) = ya

Con la definición: Rk,...,(k−1)(x) = 0.

Page 420: Métodos Numéricos en Física

¿Como se ve?main_ip_burlischstoer.c

−1

0

1

2

3

4

0 1 2 3 4 5

y

x

data

Page 421: Métodos Numéricos en Física

¿Como se ve?main_ip_burlischstoer.c

−1

0

1

2

3

4

0 1 2 3 4 5

y

x

datan = 2

Page 422: Métodos Numéricos en Física

¿Como se ve?main_ip_burlischstoer.c

−1

0

1

2

3

4

0 1 2 3 4 5

y

x

datan = 3

Page 423: Métodos Numéricos en Física

¿Como se ve?main_ip_burlischstoer.c

−1

0

1

2

3

4

0 1 2 3 4 5

y

x

datan = 4

Page 424: Métodos Numéricos en Física

¿Como se ve?main_ip_burlischstoer.c

−1

0

1

2

3

4

0 1 2 3 4 5

y

x

datan = 5

Page 425: Métodos Numéricos en Física

¿Como se ve?main_ip_burlischstoer.c

−1

0

1

2

3

4

0 1 2 3 4 5

y

x

datan = 6

Page 426: Métodos Numéricos en Física

Recursión para diferencias.

R(n)a (x) = Ra,...,(a+n)(x)− Ra,...,(a+n−1)(x)

L(n)a (x) = Ra,...,(a+n)(x)− R(a+1),...,(a+n)(x)

Recursión para diferencias:

R(n+1)a (x) =

(x−xa

x−xa+n+1

)L(n)

a (x)[R(n)

a+1(x)− L(n)a (x)

](

x−xax−xa+n+1

)L(n)

a (x)− R(n)a+1(x)

L(n+1)a (x) =

R(n)a+1(x)

[R(n)

a+1(x)− L(n)a (x)

](

x−xax−xa+n+1

)L(n)

a (x)− R(n)a+1(x)

Valores iniciales: R(0)a (x) = L(0)

a (x) = ya

Page 427: Métodos Numéricos en Física

Implementación.ip_burlischstoer.c

1 /*! \file ip_burlischstoer.c */2

3 #include <math.h>4 #include <float.h>5 #include <stdlib.h>6 #include <assert.h>7

8 /*! Calculates a rational interpolation using the recursion9 of Burlisch & Stoer. */

10 double ip_burlischstoer(double xi, double* x, double* y, int n)11 12 double *r, *l;13 double diff, diff_min, yi;14 double ratio, factor;15 int i, m, i_min;16

17 assert(n > 0);18

19 r = malloc(n * sizeof(double));20 l = malloc(n * sizeof(double));

Page 428: Métodos Numéricos en Física

Implementación.ip_burlischstoer.c

22 diff_min = fabs(xi-x[0]);23 i_min = 0;24 for (i = 0; i < n; i++) 25 diff = fabs(xi-x[i]);26 if (diff == 0.0) 27 free(r);28 free(l);29 return y[i];30 31 else if (diff < diff_min) 32 diff_min = diff;33 i_min = i;34 35 r[i] = y[i];36 l[i] = y[i]; /* + DBL_MIN; */37 38 yi = y[i_min];

Page 429: Métodos Numéricos en Física

Implementación.ip_burlischstoer.c

39 for (m = 1; m < n; m++) 40 for (i = 0; i < n-m; i++) 41 ratio = (xi-x[i])/(xi-x[i+m]) * l[i];42 factor = ratio - r[i+1];43 factor = (fabs(factor) < DBL_MIN) ? DBL_MIN : factor;44 factor = (r[i+1]-l[i])/factor;45 l[i] = r[i+1] * factor;46 r[i] = ratio * factor;47 48 yi += ( ((2*i_min) < (n-m)) ? r[i_min] : l[--i_min] );49 50 free(r);51 free(l);52 return yi;53

Page 430: Métodos Numéricos en Física

Resultado.main_ip_burlischstoer.c

0

20

40

60

80

100

−1 −0.5 0 0.5 1

y

x

datafunción

Page 431: Métodos Numéricos en Física

Resultado.main_ip_burlischstoer.c

0

20

40

60

80

100

−1 −0.5 0 0.5 1

y

x

datafunción

polinomial

Page 432: Métodos Numéricos en Física

Resultado.main_ip_burlischstoer.c

0

20

40

60

80

100

−1 −0.5 0 0.5 1

datafunciónracional

y

x

Page 433: Métodos Numéricos en Física

Interpolación racional local.ip_ratlocal.c

1 /*! \file ip_ratlocal.c */2

3 #include <assert.h>4

5 /*! Calculates a local rational interpolation using p data6 points from the vector of n data. Uses the recurrence7 by Burlisch & Stoer. */8 double ip_ratlocal(double xi, int p, double* x, double* y,9 int n)

10 11 int pos;12 int searchidx(double, double*, int);13 double ip_burlischstoer(double, double*, double*, int);14

15 assert((n > 0) && (xi >= x[0]) && (xi <= x[n-1]));16

17 pos = searchidx(xi, x, n) - p/2 + 1;18 pos = (pos < 0) ? 0 : pos; /* ensure pos >= 0 */19 pos = (pos > (n-p)) ? (n-p) : pos; /* ensure pos+p <= n */20 return ip_burlischstoer(xi, &(x[pos]), &(y[pos]), p);21

Page 434: Métodos Numéricos en Física

Comparación.main_ip_ratlocal.c

1 #include <stdio.h>2

3 #define GAMMA 0.14 #define X0 0.15 #define N 416 #define XMAX 0.57 #define DX (2.0*XMAX/(N-1.0))8

9 double function(double x)10 11 double res;12 res = 0.0008 / (x*x + 0.001* GAMMA*GAMMA);13 res += 1.0 / ((x-X0)*(x-X0) + GAMMA*GAMMA);14 return res;15 16

17 double ip_polylocal(double, int, double*, double*, int);18 double ip_burlischstoer(double, double*, double*, int);19 double ip_ratlocal(double, int, double*, double*, int);

Page 435: Métodos Numéricos en Física

Comparación.main_ip_ratlocal.c

21 int main(void)22 23 int n;24 double xi, yi, ycorrect;25 double x[N], y[N];26 double yi4, yi5, yi6;27 double yp4, yp5, yp6;28

29 for (n = 0; n < N; n++) 30 x[n] = n * DX - XMAX;31 y[n] = function(x[n]);32 printf("%g %g\n", x[n], y[n]);33

Page 436: Métodos Numéricos en Física

Comparación.main_ip_ratlocal.c

34 printf("\n\n");35 for (xi = -XMAX; xi <= XMAX; xi += 0.005) 36 yi = ip_burlischstoer(xi, x, y, N);37 yi4 = ip_ratlocal(xi, 4, x, y, N);38 yi5 = ip_ratlocal(xi, 5, x, y, N);39 yi6 = ip_ratlocal(xi, 6, x, y, N);40 yp4 = ip_polylocal(xi, 4, x, y, N);41 yp5 = ip_polylocal(xi, 5, x, y, N);42 yp6 = ip_polylocal(xi, 6, x, y, N);43 ycorrect = function(xi);44 printf("%g %g %g %g %g %g %g %g %g\n",45 xi, ycorrect, yi, yi4, yi5, yi6,46 yp4, yp5, yp6);47 48 return 0;49

Page 437: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

120

−0.6 −0.4 −0.2 0 0.2 0.4 0.6

y

x

datafunción

Page 438: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

120

−0.6 −0.4 −0.2 0 0.2 0.4 0.6

y

x

datafunciónracional

Page 439: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

120

−0.6 −0.4 −0.2 0 0.2 0.4 0.6

y

x

datafunción

rational local (4)

Page 440: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

120

−0.6 −0.4 −0.2 0 0.2 0.4 0.6

y

x

datafunción

rational local (5)

Page 441: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

120

−0.6 −0.4 −0.2 0 0.2 0.4 0.6

y

x

datafunción

rational local (6)

Page 442: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

120

−0.6 −0.4 −0.2 0 0.2 0.4 0.6

y

x

datafunción

poly local (4)

Page 443: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

120

−0.6 −0.4 −0.2 0 0.2 0.4 0.6

y

x

datafunción

poly local (5)

Page 444: Métodos Numéricos en Física

Resultado.

0

20

40

60

80

100

120

−0.6 −0.4 −0.2 0 0.2 0.4 0.6

y

x

datafunción

poly local (6)

Page 445: Métodos Numéricos en Física

Pro y con.

Interpolación polinomial local:

Con:No puede reproducir estructuras extremas como peaks.Produce oscilaciones.

Pro: Bueno para datos suaves.

Interpolación racional local:

Con: Spikes artificialesPro:

Reproduce peaks muy bien.Bueno para datos de una función racional (espectra, Lorentz etc.).

Page 446: Métodos Numéricos en Física

Pro y con.

Interpolación polinomial local:

Con:No puede reproducir estructuras extremas como peaks.Produce oscilaciones.

Pro: Bueno para datos suaves.

Interpolación racional local:

Con: Spikes artificialesPro:

Reproduce peaks muy bien.Bueno para datos de una función racional (espectra, Lorentz etc.).

Page 447: Métodos Numéricos en Física

Pro y con.

Interpolación polinomial local:

Con:No puede reproducir estructuras extremas como peaks.Produce oscilaciones.

Pro: Bueno para datos suaves.

Interpolación racional local:

Con: Spikes artificialesPro:

Reproduce peaks muy bien.Bueno para datos de una función racional (espectra, Lorentz etc.).

Page 448: Métodos Numéricos en Física

Pro y con.

Interpolación polinomial local:

Con:No puede reproducir estructuras extremas como peaks.Produce oscilaciones.

Pro: Bueno para datos suaves.

Interpolación racional local:

Con: Spikes artificialesPro:

Reproduce peaks muy bien.Bueno para datos de una función racional (espectra, Lorentz etc.).

Page 449: Métodos Numéricos en Física

Pro y con.

Interpolación polinomial local:

Con:No puede reproducir estructuras extremas como peaks.Produce oscilaciones.

Pro: Bueno para datos suaves.

Interpolación racional local:

Con: Spikes artificialesPro:

Reproduce peaks muy bien.Bueno para datos de una función racional (espectra, Lorentz etc.).

Page 450: Métodos Numéricos en Física

Pro y con.

Interpolación polinomial local:

Con:No puede reproducir estructuras extremas como peaks.Produce oscilaciones.

Pro: Bueno para datos suaves.

Interpolación racional local:

Con: Spikes artificialesPro:

Reproduce peaks muy bien.Bueno para datos de una función racional (espectra, Lorentz etc.).

Page 451: Métodos Numéricos en Física

Resumen.

Alerta:Interpolación no se puede usar sin saber la forma de la función queproduce los datos!

Page 452: Métodos Numéricos en Física

Parte VIIntegración

Page 453: Métodos Numéricos en Física

Integración como una ecuación diferencial.

Queremos calcular la integral:

I(b,a) =

∫ b

adxf (x)

Es equivalente a resolver la siguente ecuación diferencial:

dI(x ,a)

dx= f (x)

donde la condición inicial es:

I(x ,a)|x=a = 0

Aviso:Integración es un problema equivalente a resolver una ecuacióndiferencial!

Page 454: Métodos Numéricos en Física

Integración como una ecuación diferencial.

Queremos calcular la integral:

I(b,a) =

∫ b

adxf (x)

Es equivalente a resolver la siguente ecuación diferencial:

dI(x ,a)

dx= f (x)

donde la condición inicial es:

I(x ,a)|x=a = 0

Aviso:Integración es un problema equivalente a resolver una ecuacióndiferencial!

Page 455: Métodos Numéricos en Física

Regla trapezoidal.

x

y

x0 = a x1 = b

f1

f0

I(b,a) =

∫ b

adxf (x) = ∆x

(12

f0 +12

f1

)+O

(∆x3f (2)

),

∆x = b − a

Correcto para una función polinomial f (x) hasta orden 1!Es decir para una recta solo!

Page 456: Métodos Numéricos en Física

Regla de Simpson.

x

y

x0 = a

f0

x1 x2 = b

16

23

16

f1

f2

I(b,a) =

∫ b

adxf (x) = ∆x

(16

f0 +23

f1 +16

f2

)+O

(∆x5f (4)

)∆x = (b − a)/2

Correcto para una función polinomial f (x) hasta orden 3!Es decir para una hiperbola!

Page 457: Métodos Numéricos en Física

Reglas extendidas.

x

y

x0 = a xN−1 = b

∆xN

Dividir intervalo ∆x = b − a en N − 1 pequeños equidistantesintervalos con tamaño:

∆xN =∆x

N − 1=

b − aN − 1

Entonces:

I(b,a) =

∫ b

adxf (x) =

N−2∑k=0

∫ xk+1

xk

dxf (x)

Page 458: Métodos Numéricos en Física

Regla trapezoidal extendida.

Con la regla trapezoidal resulta:

I(b,a) =N−2∑k=0

∆xN

(12

fk +12

fk+1

)+O

(∆x3

N f (2))

= ∆xN

(12

f0 + f1 + . . .+ fN−2 +12

fN−1

)+(N − 1)×O

[(∆x

N − 1

)3

f (2)

]

= ∆xN

(12

f0 + f1 + . . .+ fN−2 +12

fN−1

)︸ ︷︷ ︸

SN

+O(

∆x3f (2)

N2

)

= SN +O(N−2)

Page 459: Métodos Numéricos en Física

Regla de Simpson extendida.

Con la regla de Simpson para pares de intervalos resulta:

I(b,a) =

N−12 −1∑k=0

∆xN

(16

f2k +23

f2k+1 +16

f2k+2

)+O

(∆x5

N f (4))

= ∆xN

[(16

f0 +23

f1 +16

f2

)+

(16

f2 +23

f3 +16

f4

)+ . . .

. . .+

(16

fN−3 +23

fN−2 +16

fN−1

)]+

N − 12

×O

[(∆x

N − 1

)5

f (4)

]

= ∆xN

(16

f0 +23

f1 +13

f2 +23

f3 + . . .+23

fN−2 +16

fN−1

)︸ ︷︷ ︸

SN

+O(N−4)

Page 460: Métodos Numéricos en Física

Iteración con regla trapezoidal extendida.

xN = 2

a b

Regla trapezoidal extendida:

I = SN = ∆xN

[f02

+ f1 + f2 + . . .+ fN−2 +fN−1

2

]donde:

∆xN =b − aN − 1

fk = f (a + k ·∆xN), k = 0,1, . . . ,N − 1

Page 461: Métodos Numéricos en Física

Iteración con regla trapezoidal extendida.

x

a b

N = 3

Regla trapezoidal extendida:

I = SN = ∆xN

[f02

+ f1 + f2 + . . .+ fN−2 +fN−1

2

]donde:

∆xN =b − aN − 1

fk = f (a + k ·∆xN), k = 0,1, . . . ,N − 1

Page 462: Métodos Numéricos en Física

Iteración con regla trapezoidal extendida.

x

a b

N = 5

Regla trapezoidal extendida:

I = SN = ∆xN

[f02

+ f1 + f2 + . . .+ fN−2 +fN−1

2

]donde:

∆xN =b − aN − 1

fk = f (a + k ·∆xN), k = 0,1, . . . ,N − 1

Page 463: Métodos Numéricos en Física

Iteración con regla trapezoidal extendida.

x

a b

N = 9

Regla trapezoidal extendida:

I = SN = ∆xN

[f02

+ f1 + f2 + . . .+ fN−2 +fN−1

2

]donde:

∆xN =b − aN − 1

fk = f (a + k ·∆xN), k = 0,1, . . . ,N − 1

Page 464: Métodos Numéricos en Física

Iteración con regla trapezoidal extendida.

x

a b

N = 9

Regla trapezoidal extendida:

I = SN = ∆xN

[f02

+ f1 + f2 + . . .+ fN−2 +fN−1

2

]donde:

∆xN =b − aN − 1

fk = f (a + k ·∆xN), k = 0,1, . . . ,N − 1

Page 465: Métodos Numéricos en Física

Recursión.

Iteración #0: h(0) = b − a

S(0) = S2 = (b − a)

[12

f (a) +12

f (b)

]= h(0)

[12

f (a) +12

f(

a + h(0))]

Page 466: Métodos Numéricos en Física

Recursión.

Iteración #1: h(1) = h(0)/2 = (b − a)/2

S(1) = S3 =b − a

2

[12

f (a) + f(

a + b2

)+

12

f (b)

]= h(1)

[12

f (a) + f(

a + h(1))

+12

f(

a + h(0))]

=12

S(0) + h(1)f(

a + h(1))

Page 467: Métodos Numéricos en Física

Recursión.

Iteración #2: h(2) = h(2)/2 = (b − a)/4

S(2) = S5 =b − a

4

[12

f (a) + f(

3a + b4

)+ f(

a + b2

)+f(

a + 3b4

)+

12

f (b)

]= h(2)

[12

f (a) + f(

a + h(2))

+ f(

a + h(1))

+f(

a + h(1) + h(2))

+12

f(

a + h(0))]

=12

S(1) + h(2)[f(

a + h(2))

+ f(

a + h(1) + h(2))]

Page 468: Métodos Numéricos en Física

Formula de recursión.

En general la formula de recursión es:

S(i+1) =12

S(i) + h(i+1)i∑

k=0

f(

a + h(i+1) + k ·h(i))

S(0) = (b − a)

[12

f (a) +12

f (b)

]donde los pasos son:

h(i+1) = h(i)/2, h(0) = b − a

Estimación del error:

I = S(i) +O[(

N(i))−2

], N(i) = 2 +

i−1∑k=0

2k

Page 469: Métodos Numéricos en Física

Formula de Euler-Maclaurin.

Formula de Euler-Maclaurin:

I(b,a) =

∫ b

adxf (x) = SN + EN

donde SN es la regla trapezoidal exendida y el error es dado por:

EN = −∞∑

k=1

B2k (∆xN)2k

(2k)!

[f (2k−1)(b)− f (2k−1)(a)

]con numeros de Bernoulli Bn (no convergentes):

B0 = 1, B2 =16,B4 = − 1

30, B6 =

142, etc.

Page 470: Métodos Numéricos en Física

Orden del error en la recursión.

En la iteración i tenemos N(i) datos en la integración:

S(i) = SN(i) = I(b,a) +∞∑

k=1

B2k (∆xN(i))2k

(2k)!

[f (2k−1)(b)− f (2k−1)(a)

]

= I(b,a) +∞∑

k=1

B2k(h(i))2k

(2k)!

[f (2k−1)(b)− f (2k−1)(a)

]Esta suma tiene error del orden:

S(i) = I(b,a) +O[(

N(i))−2

]

Page 471: Métodos Numéricos en Física

Combinación inteligente.

En vez de S(i) vamos a usar la combinación:

C(i+1) =4S(i+1) − S(i)

3= I(b,a) + E (i+1)

C

Resulta que su error es mucho mejor:

C(i) = I(b,a) +O[(

N(i))−4

]

Page 472: Métodos Numéricos en Física

Prueba.Vamos a calcular el error:

E (i+1)C =

4E (i+1) − E (i)

3

=13

∞∑k=1

4

B2k(h(i+1)

)2k

(2k)!−

B2k(h(i))2k

(2k)!

×[f (2k−1)(b)− f (2k−1)(a)

]=

13

∞∑k=1

(44k − 1

)B2k

(h(i))2k

(2k)!

[f (2k−1)(b)− f (2k−1)(a)

]

=∞∑

k=2

41−k − 13

B2k(h(i))2k

(2k)!

[f (2k−1)(b)− f (2k−1)(a)

]

=∞∑

k=1

4−k − 13

B2k+2(h(i))2k+2

(2k + 2)!

[f (2k+1)(b)− f (2k+1)(a)

]

Page 473: Métodos Numéricos en Física

¿Que es eso?

Se puede demonstrar que:

C(i) = CN(i) =4S(i) − S(i−1)

3

= ∆xN(i)

(16

f0 +23

f1 +13

f2 +23

f3 + . . .+23

fNi−2 +16

fNi−1

)Eso es la regla de Simpson extendida. Por eso tenemos un errorO[(N(i))−4]!

Page 474: Métodos Numéricos en Física

Implementación.ig_simpsonext.c

1 /*! \file ig_simpsonext.c */2

3 #include <math.h>4 #include <float.h>5 #include <assert.h>6

7 /*! Calculates the integral of the function f from a to b8 with relative error eps. Uses the Simpson extended9 formula calculating a special combination of the

10 trapezoidal extended rule. */11 double ig_simpsonext(double (*f)(double), double a, double b,12 double eps)13 14 double h, s, sum, x, res, res_old;15 int n, nmax;16

17 assert((b > a) && (eps > 0.0));

Page 475: Métodos Numéricos en Física

Implementación.ig_simpsonext.c

19 h = (b-a);20 s = h * 0.5 * (f(a) + f(b));21 res = s;22 nmax = 1;23 do 24 x = a + 0.5 * h;25 sum = 0.0;26 for (n = 1; n <= nmax; n++) 27 sum += f(x);28 x += h;29 30 s = 0.5 * (s + h * sum);31 res_old = res;32 res = (4.0 * s - res_old) / 3.0; /* Simpson extended */33 h *= 0.5;34 nmax *= 2;35 while (fabs(res - res_old) > fabs(res) * eps);36 return res;37

Page 476: Métodos Numéricos en Física

Error es una serie de potencias.

Sabemos para la regla trapezoidal que la integral es:

I(b,a) =

∫ b

adxf (x) = SN + EN

donde para N − 1 puntos de datos la regla trapezoidal extendidaresulta en

SN = ∆xN

[f02

+ f1 + f2 + . . .+ fN−2 +fN−1

2

]y la formula de Euler-Maclaurin nos da el error como

EN = −∞∑

k=1

B2k (∆xN)2k

(2k)!

[f (2k−1)(b)− f (2k−1)(a)

]El error es una serie de potencias en el paso ∆xN !

Page 477: Métodos Numéricos en Física

Error es una serie de potencias.

Sabemos para la regla trapezoidal que la integral es:

I(b,a) =

∫ b

adxf (x) = SN + EN

donde para N − 1 puntos de datos la regla trapezoidal extendidaresulta en

SN = ∆xN

[f02

+ f1 + f2 + . . .+ fN−2 +fN−1

2

]y la formula de Euler-Maclaurin nos da el error como

EN = −∞∑

k=1

B2k (∆xN)2k

(2k)!

[f (2k−1)(b)− f (2k−1)(a)

]El error es una serie de potencias en el paso ∆xN !

Page 478: Métodos Numéricos en Física

Error en la recursión.La recursión para la regla trapezoidal extendida es:

S(i+1) =S(i)

2+h(i+1)

i∑k=0

f(

a + h(i+1) + k ·h(i)), S(0) =

b − a2

[f (a) + f (b)]

donde la recursión para los pasos es:

h(i+1) = h(i)/2, h(0) = b − a

El error es entonces (∆xN → ∆xNi → h(i)):

EN → ENi → E (i) = −∞∑

k=1

B2k(h(i))2k

(2k)!

[f (2k−1)(b)− f (2k−1)(a)

]Definimos:

ε(i) =

(h(i)

b − a

)2

, ε(i+1) =ε(i)

4, ε(0) = 1

entonces el error es una serie de potencias en ε:

E (i) = E(ε(i))

Page 479: Métodos Numéricos en Física

Error en la recursión.La recursión para la regla trapezoidal extendida es:

S(i+1) =S(i)

2+h(i+1)

i∑k=0

f(

a + h(i+1) + k ·h(i)), S(0) =

b − a2

[f (a) + f (b)]

donde la recursión para los pasos es:

h(i+1) = h(i)/2, h(0) = b − a

El error es entonces (∆xN → ∆xNi → h(i)):

EN → ENi → E (i) = −∞∑

k=1

B2k(h(i))2k

(2k)!

[f (2k−1)(b)− f (2k−1)(a)

]Definimos:

ε(i) =

(h(i)

b − a

)2

, ε(i+1) =ε(i)

4, ε(0) = 1

entonces el error es una serie de potencias en ε:

E (i) = E(ε(i))

Page 480: Métodos Numéricos en Física

Idéa de Romberg.

Nuestra aproximación es entonces una serie de potencias (∼unpolinomial):

S(i) = I(b,a)− E(ε(i)) → S(ε(i))

1

ε

S(ε)

116

14

i = 0

i = 1i = 2

En cada paso de la recursión, hacer una extrapolación de losresultados ya calculados hacia ε→ 0.

Page 481: Métodos Numéricos en Física

Romberg con regla trapezoidal extendida.ig_romberg.c

1 /*! \file ig_romberg.c */2

3 #include <math.h>4 #include <float.h>5 #include <stdlib.h>6 #include <assert.h>7

8 /*! Polynomial extrapolation at the position x=0.0 using9 the Neville recurrence. It assumes that for p points

10 0 is the index of the most nearest x[i]. Gives back11 also an estimate of error dy. */12 double expol_to_zero(double* x, double* y, int p, double* dy,13 double* r, double* l)14 15 double diff, yi;16 int i, m, i_min;

Page 482: Métodos Numéricos en Física

Romberg con regla trapezoidal extendida.ig_romberg.c

18 for (i = 0; i < p; i++) 19 r[i] = y[i];20 l[i] = y[i];21 22 i_min = 0;23 yi = y[i_min];24

25 for (m = 1; m < p; m++) 26 for (i = 0; i < p-m; i++) 27 diff = (r[i+1]-l[i]) / (x[i]-x[i+m]);28 r[i] = x[i] * diff;29 l[i] = x[i+m] * diff;30 31 (*dy) = ( ((2*i_min) < (p-m)) ? r[i_min] : l[--i_min] );32 yi += (*dy);33 34 return yi;35

Page 483: Métodos Numéricos en Física

Romberg con regla trapezoidal extendida.ig_romberg.c

37 /*! Romberg integration of function f using extended38 trapezoidal formula with polynomial extrapolation39 of p data points. */40 double ig_romberg(double (*f)(double), double a, double b,41 int p, double eps)42 43 double h, sum, x, res, err;44 int i, n, nmax;45 double *s, *hv, *r, *l;46

47 assert((b > a) && (p > 1));48

49 s = malloc(p * sizeof(double));50 hv = malloc(p * sizeof(double));51 r = malloc(p * sizeof(double));52 l = malloc(p * sizeof(double));

Page 484: Métodos Numéricos en Física

Romberg con regla trapezoidal extendida.ig_romberg.c

54 h = (b-a);55 nmax = 1;56 s[p-1] = h * 0.5 * (f(a) + f(b));57 hv[p-1] = 1.0;58 i = p-2;59

60 res = 0.0;61 err = DBL_MAX;

Page 485: Métodos Numéricos en Física

Romberg con regla trapezoidal extendida.ig_romberg.c

63 do 64 x = a + 0.5 * h;65 sum = 0.0;66 for (n = 1; n <= nmax; n++) 67 sum += f(x);68 x += h;69 70 s[i] = 0.5 * (s[i+1] + h * sum);71 hv[i] = 0.25 * hv[i+1];72 h *= 0.5;73 nmax *= 2;74 if (i > 0)75 i--;76 else 77 res = expol_to_zero(hv, s, p, &err, r, l);78 for (n = p-1; n > 0; n--) 79 s[n] = s[n-1];80 hv[n] = hv[n-1];81 82 83 while (fabs(err) > fabs(res) * eps);

Page 486: Métodos Numéricos en Física

Romberg con regla trapezoidal extendida.ig_romberg.c

85 free(s);86 free(hv);87 free(r);88 free(l);89

90 return res;91

Page 487: Métodos Numéricos en Física

Romberg con regla de Simpson extendida.ig_romberg_simpsonext.c

1 /*! \file ig_romberg_simpsonext.c */2

3 #include <math.h>4 #include <float.h>5 #include <stdlib.h>6 #include <assert.h>7

8 double expol_to_zero(double*, double*, int, double*,9 double*, double*);

10

11 /*! Romberg integration of function f using extended Simpson12 formula with polynomial extrapolation of p data points. */13 double ig_romberg_simpsonext(double (*f)(double), double a,14 double b, int p, double eps)15 16 double h, sum, x, res, err;17 int i, n, nmax;18 double s, s_old;19 double *c, *hv, *r, *l;20

21 assert((b > a) && (p > 1));

Page 488: Métodos Numéricos en Física

Romberg con regla de Simpson extendida.ig_romberg_simpsonext.c

22

23 c = malloc(p * sizeof(double));24 hv = malloc(p * sizeof(double));25 r = malloc(p * sizeof(double));26 l = malloc(p * sizeof(double));27

28 h = (b-a);29 nmax = 1;30 s_old = h * 0.5 * (f(a) + f(b));31 c[p-1] = s_old;32 hv[p-1] = 1.0;33 i = p-2;34

35 res = 0.0;36 err = DBL_MAX;

Page 489: Métodos Numéricos en Física

Romberg con regla de Simpson extendida.ig_romberg_simpsonext.c

38 do 39 x = a + 0.5 * h;40 sum = 0.0;41 for (n = 1; n <= nmax; n++) 42 sum += f(x);43 x += h;44 45 s = 0.5 * (s_old + h * sum);46 c[i] = (4.0 * s - s_old) / 3.0;47 hv[i] = 0.0625 * hv[i+1];48 h *= 0.5;49 nmax *= 2;50 s_old = s;51 if (i > 0)52 i--;53 else 54 res = expol_to_zero(hv, c, p, &err, r, l);55 for (n = p-1; n > 0; n--) 56 c[n] = c[n-1];57 hv[n] = hv[n-1];58 59 60 while (fabs(err) > fabs(res) * eps);

Page 490: Métodos Numéricos en Física

Romberg con regla de Simpson extendida.ig_romberg_simpsonext.c

62 free(c);63 free(hv);64 free(r);65 free(l);66

67 return res;68

Page 491: Métodos Numéricos en Física

Intensidad transmitida de un resonador de laser.

RS, TSRS, TS γ, κ0

Iout(ω)Iin(ω)

L ·λ0

Medio Activo (Laser)

Resonador: ω0 =Frequencia de resonancia, λ0 = 2πc/ω0

Intensidad transmitida:

Iout(ω)

Iin(ω)=

T 4S

1 + r2(ω)− 2r(ω) cos(2ωL)

r(ω) = R2s exp

− 2Lκ0γ

2

(ω − ω0)2 + γ2

Page 492: Métodos Numéricos en Física

Comportamiento.

0

5

10

15

20

25

0.4 0.6 0.8 1 1.2 1.4 1.6

TS = 95 %

γ/ω0 = 0,5κ0/ω0 = −0,1L = 29

I out/I

in

ω/ω0

Page 493: Métodos Numéricos en Física

Comparación de métodos.main_ig_romberg.c

1 #include <math.h>2 #include <stdio.h>3 #include <float.h>4

5 /* Laser resonator: */6 #define R_S 0.05 /* reflection of mirrors */7 #define T_S (1.0-R_S) /* transmission of mirrors */8 #define OMEGA_0 1.0 /* resonance frequency */9 #define GAMMA 0.5 /* natural linewidth */

10 #define KAPPA_0 -0.10 /* absorption at OMEGA_0 */11 #define L 29.0 /* effective length */12

13 int count;14

15 double ig_simpsonext(double (*f)(double), double, double,16 double);17 double ig_romberg(double (*f)(double), double, double, int,18 double);19 double ig_romberg_simpsonext(double (*f)(double), double,20 double, int, double);

Page 494: Métodos Numéricos en Física

Comparación de métodos.main_ig_romberg.c

22 double power(double omega)23 24 double f, kappa, intensity;25

26 count++;27 kappa = KAPPA_0 * GAMMA * GAMMA28 / ((omega-OMEGA_0)*(omega-OMEGA_0) + GAMMA*GAMMA);29 f = R_S * R_S * exp(-2.0 * kappa * L);30 intensity = T_S * T_S * T_S * T_S31 / (1.0 + f*f - 2.0 * f * cos(2.0*omega*L));32 return intensity;33

Page 495: Métodos Numéricos en Física

Comparación de métodos.main_ig_romberg.c

35 int main(void)36 37 double p, eps, x;38

39 for (x = 0.4; x <= 1.6; x+= 0.0001)40 printf("%g %g\n", x, power(x));41 printf("\n\n");42

43 fprintf(stderr, "Simpson extended:\n"44 "eps\t\teff. power\tfunction calls\n");45 for (eps = 1.0e-5; eps >= 1.0e-6; eps *= 0.1) 46 count = 0;47 p = ig_simpsonext(power, 0.2, 2.0, eps);48 fprintf(stderr, "%e\t%13.12f\t%d\n", eps, p, count);49 50

51 fprintf(stderr, "Romberg extended trapezoidal:\n"52 "eps\t\teff. power\tfunction calls\n");53 for (eps = 1.0e-5; eps >= 1.0e-12; eps *= 0.1) 54 count = 0;55 p = ig_romberg(power, 0.2, 2.0, 5, eps);56 fprintf(stderr, "%e\t%13.12f\t%d\n", eps, p, count);57

Page 496: Métodos Numéricos en Física

Comparación de métodos.main_ig_romberg.c

59 fprintf(stderr, "Romberg Simpson extended:\n"60 "eps\t\teff. power\tfunction calls\n");61 for (eps = 1.0e-5; eps >= 1.0e-12; eps *= 0.1) 62 count = 0;63 p = ig_romberg_simpsonext(power, 0.2, 2.0, 5, eps);64 fprintf(stderr, "%e\t%13.12f\t%d\n", eps, p, count);65 66

67 return 0;68

Page 497: Métodos Numéricos en Física

Resultado.

1 Simpson extended:2 eps eff. power function calls3 1.000000e-05 1.796780388508 1310734 1.000000e-06 1.796777940861 524289

Page 498: Métodos Numéricos en Física

Resultado.

1 Simpson extended:2 eps eff. power function calls3 1.000000e-05 1.796780388508 1310734 1.000000e-06 1.796777940861 5242895 Romber extended trapezoidal:6 eps eff. power function calls7 1.000000e-05 1.797186829173 10258 1.000000e-06 1.796748783043 20499 1.000000e-07 1.796778097073 4097

10 1.000000e-08 1.796777633013 819311 1.000000e-09 1.796777633013 819312 1.000000e-10 1.796777634905 1638513 1.000000e-11 1.796777634905 1638514 1.000000e-12 1.796777634903 32769

Page 499: Métodos Numéricos en Física

Resultado.

5 Romber extended trapezoidal:6 eps eff. power function calls7 1.000000e-05 1.797186829173 10258 1.000000e-06 1.796748783043 20499 1.000000e-07 1.796778097073 4097

10 1.000000e-08 1.796777633013 819311 1.000000e-09 1.796777633013 819312 1.000000e-10 1.796777634905 1638513 1.000000e-11 1.796777634905 1638514 1.000000e-12 1.796777634903 3276915 Romberg Simpson extended:16 eps eff. power function calls17 1.000000e-05 1.927207617183 1718 1.000000e-06 1.797229350106 51319 1.000000e-07 1.797187315536 102520 1.000000e-08 1.797187315536 102521 1.000000e-09 1.797187315536 102522 1.000000e-10 1.796777634751 819323 1.000000e-11 1.796777634751 819324 1.000000e-12 1.796777634751 8193

Page 500: Métodos Numéricos en Física

Funcion especial: Gamma incompleta.

1 #include <math.h>2 #include <float.h>3 #include <stdio.h>4

5 double ig_romberg(double (*)(double), double, double,6 int, double);7 double log_gamma(double);8

9 double x;10

11 double function(double t)12 13 return exp(-t+(x-1.0)*log(t)-log_gamma(x));14

Funciona, pero:

Es 74× mas lento que “gamma_incomplete(..)”!

Page 501: Métodos Numéricos en Física

Funcion especial: Gamma incompleta.

16 int main(void)17 18 double a, res, eps;19

20 eps = DBL_EPSILON;21 for (x = 1.0; x <= 10.0; x += 1.0) 22 for (a = 0.0; a <= 15.0; a += 0.005) 23 res = (a == 0) ? 0.024 : ig_romberg(function, 0.0, a, 5, eps);25 printf("%g %g\n", a, res);26 27 printf("\n\n");28 29 return 0;30

Funciona, pero:

Es 74× mas lento que “gamma_incomplete(..)”!

Page 502: Métodos Numéricos en Física

Funcion especial: Gamma incompleta.

16 int main(void)17 18 double a, res, eps;19

20 eps = DBL_EPSILON;21 for (x = 1.0; x <= 10.0; x += 1.0) 22 for (a = 0.0; a <= 15.0; a += 0.005) 23 res = (a == 0) ? 0.024 : ig_romberg(function, 0.0, a, 5, eps);25 printf("%g %g\n", a, res);26 27 printf("\n\n");28 29 return 0;30

Funciona, pero:

Es 74× mas lento que “gamma_incomplete(..)”!

Page 503: Métodos Numéricos en Física

Integral inpropia.

Uno de los limites es infinito:

I(∞,a) =

∫ ∞

adxf (x) = S(∞,a) + E(∞,a)

¿Cómo se puede determinar el limite maximo?

Integral es aditivo: Vamos a usar una serie de aproximacionespara el limite maximo a1,a2, . . .

S(∞,a) = S(a1,a0) + S(a2,a1) + S(a3,a2) + . . . , a0 = a

Queremos la integral con un error relativo maximo ε. Entonces

|E(∞,a)| ≤ ε|S(∞,a)|

¿Qué errores E(ak ,ak−1) podemos permitir?

Page 504: Métodos Numéricos en Física

Integral inpropia.

Uno de los limites es infinito:

I(∞,a) =

∫ ∞

adxf (x) = S(∞,a) + E(∞,a)

¿Cómo se puede determinar el limite maximo?

Integral es aditivo: Vamos a usar una serie de aproximacionespara el limite maximo a1,a2, . . .

S(∞,a) = S(a1,a0) + S(a2,a1) + S(a3,a2) + . . . , a0 = a

Queremos la integral con un error relativo maximo ε. Entonces

|E(∞,a)| ≤ ε|S(∞,a)|

¿Qué errores E(ak ,ak−1) podemos permitir?

Page 505: Métodos Numéricos en Física

Integral inpropia.

Uno de los limites es infinito:

I(∞,a) =

∫ ∞

adxf (x) = S(∞,a) + E(∞,a)

¿Cómo se puede determinar el limite maximo?

Integral es aditivo: Vamos a usar una serie de aproximacionespara el limite maximo a1,a2, . . .

S(∞,a) = S(a1,a0) + S(a2,a1) + S(a3,a2) + . . . , a0 = a

Queremos la integral con un error relativo maximo ε. Entonces

|E(∞,a)| ≤ ε|S(∞,a)|

¿Qué errores E(ak ,ak−1) podemos permitir?

Page 506: Métodos Numéricos en Física

Errores.

Cada parte se calcula con error relativo maximo εk :

|E(ak ,ak−1)| ≤ εk |S(ak ,ak−1)|

Error total:

|E(∞,a)| ≤∑

k

|E(ak ,ak−1)| ≤∑

k

εk |S(ak ,ak−1)|

Nuestra condicion del error relativo maximo:

|E(∞,a)| ≤ ε

∣∣∣∣∣∑k

S(ak ,ak−1)

∣∣∣∣∣ ≤ ε∑

k

|S(ak ,ak−1)|

Error maximo permitible para cada parte:

|E(∞,a)| =∑

k

εk |S(ak ,ak−1)| ≤ ε∑

k

|S(ak ,ak−1)|

entonces: εk ≤ ε.

Page 507: Métodos Numéricos en Física

Errores.

Cada parte se calcula con error relativo maximo εk :

|E(ak ,ak−1)| ≤ εk |S(ak ,ak−1)|

Error total:

|E(∞,a)| ≤∑

k

|E(ak ,ak−1)| ≤∑

k

εk |S(ak ,ak−1)|

Nuestra condicion del error relativo maximo:

|E(∞,a)| ≤ ε

∣∣∣∣∣∑k

S(ak ,ak−1)

∣∣∣∣∣ ≤ ε∑

k

|S(ak ,ak−1)|

Error maximo permitible para cada parte:

|E(∞,a)| =∑

k

εk |S(ak ,ak−1)| ≤ ε∑

k

|S(ak ,ak−1)|

entonces: εk ≤ ε.

Page 508: Métodos Numéricos en Física

Errores.

Cada parte se calcula con error relativo maximo εk :

|E(ak ,ak−1)| ≤ εk |S(ak ,ak−1)|

Error total:

|E(∞,a)| ≤∑

k

|E(ak ,ak−1)| ≤∑

k

εk |S(ak ,ak−1)|

Nuestra condicion del error relativo maximo:

|E(∞,a)| ≤ ε

∣∣∣∣∣∑k

S(ak ,ak−1)

∣∣∣∣∣ ≤ ε∑

k

|S(ak ,ak−1)|

Error maximo permitible para cada parte:

|E(∞,a)| =∑

k

εk |S(ak ,ak−1)| ≤ ε∑

k

|S(ak ,ak−1)|

entonces: εk ≤ ε.

Page 509: Métodos Numéricos en Física

Errores.

Cada parte se calcula con error relativo maximo εk :

|E(ak ,ak−1)| ≤ εk |S(ak ,ak−1)|

Error total:

|E(∞,a)| ≤∑

k

|E(ak ,ak−1)| ≤∑

k

εk |S(ak ,ak−1)|

Nuestra condicion del error relativo maximo:

|E(∞,a)| ≤ ε

∣∣∣∣∣∑k

S(ak ,ak−1)

∣∣∣∣∣ ≤ ε∑

k

|S(ak ,ak−1)|

Error maximo permitible para cada parte:

|E(∞,a)| =∑

k

εk |S(ak ,ak−1)| ≤ ε∑

k

|S(ak ,ak−1)|

entonces: εk ≤ ε.

Page 510: Métodos Numéricos en Física

Condición para terminar.La aproximacion es I(∞,a) = S(∞,a) + E(∞,a) con

S(∞,a) =∞∑

k=0

S(ak+1,ak )

Solamente usamos la suma con K terminos:

SK =K−1∑k=0

S(ak+1,ak ), EK =∞∑

k=K

S(ak+1,ak ) + E(∞,a)

Queremos que |EK | ≤ ε|SK |:

|EK | ≈

∣∣∣∣∣∞∑

k=K

S(ak+1,ak )

∣∣∣∣∣+∞∑

k=0

E(ak+1,ak )

≈ |S(aK+1,aK )|+ ε

K−1∑k=0

|S(ak+1,ak )| ≤ ε

K−1∑k=0

|S(ak+1,ak )|

entonces:

|S(aK+1,aK )| ≤ (ε− ε)K−1∑k=0

|S(ak+1,ak )|

Page 511: Métodos Numéricos en Física

Condición para terminar.La aproximacion es I(∞,a) = S(∞,a) + E(∞,a) con

S(∞,a) =∞∑

k=0

S(ak+1,ak )

Solamente usamos la suma con K terminos:

SK =K−1∑k=0

S(ak+1,ak ), EK =∞∑

k=K

S(ak+1,ak ) + E(∞,a)

Queremos que |EK | ≤ ε|SK |:

|EK | ≈

∣∣∣∣∣∞∑

k=K

S(ak+1,ak )

∣∣∣∣∣+∞∑

k=0

E(ak+1,ak )

≈ |S(aK+1,aK )|+ ε

K−1∑k=0

|S(ak+1,ak )| ≤ ε

K−1∑k=0

|S(ak+1,ak )|

entonces:

|S(aK+1,aK )| ≤ (ε− ε)K−1∑k=0

|S(ak+1,ak )|

Page 512: Métodos Numéricos en Física

Condición para terminar.La aproximacion es I(∞,a) = S(∞,a) + E(∞,a) con

S(∞,a) =∞∑

k=0

S(ak+1,ak )

Solamente usamos la suma con K terminos:

SK =K−1∑k=0

S(ak+1,ak ), EK =∞∑

k=K

S(ak+1,ak ) + E(∞,a)

Queremos que |EK | ≤ ε|SK |:

|EK | ≈

∣∣∣∣∣∞∑

k=K

S(ak+1,ak )

∣∣∣∣∣+∞∑

k=0

E(ak+1,ak )

≈ |S(aK+1,aK )|+ ε

K−1∑k=0

|S(ak+1,ak )| ≤ ε

K−1∑k=0

|S(ak+1,ak )|

entonces:

|S(aK+1,aK )| ≤ (ε− ε)K−1∑k=0

|S(ak+1,ak )|

Page 513: Métodos Numéricos en Física

Implementación.ig_improper.c

1 /*! \file ig_improper.c */2

3 #include <math.h>4 #include <assert.h>5

6 #define EPS_FACTOR 10.07

8 double ig_romberg(double (*)(double), double, double, int, double);9

10 double ig_improper(double (*f)(double), double a, double b,11 double dx, int p, double eps)12 13 double b_lo, b_hi;14 double res, s, err;15 double eps_internal;16

17 assert((b > a) && (p > 1));

Page 514: Métodos Numéricos en Física

Implementación.ig_improper.c

19 double res, eps;20

21 count = 0;22 for (eps = 1.0e-4; eps >= 1.0e-10; eps *= 0.1) 23 res = ig_improper(f, 0.0, 1.0, 0.1, 4, eps);24 fprintf(stderr, "%e\t%13.12f\t%d\n", eps, res, count);25 26 return 0;27

Page 515: Métodos Numéricos en Física

Ejemplo: Función de error.

E(x) =2√π

∫ x

0dte−t2

, l«ımx→∞

E(x) = 1

1 #define _XOPEN_SOURCE 5002 #define _ISOC99_SOURCE3 #include <math.h>4 #include <stdio.h>5

6 double ig_improper(double (*)(double), double, double, double, int,7 double);8

9 int count;10

11 double f(double x)12 13 count++;14 return M_2_SQRTPI * exp(-x * x);15

Page 516: Métodos Numéricos en Física

Ejemplo: Función de error.

E(x) =2√π

∫ x

0dte−t2

, l«ımx→∞

E(x) = 1

17 int main(void)18 19 double res, eps;20

21 count = 0;22 for (eps = 1.0e-4; eps >= 1.0e-10; eps *= 0.1) 23 res = ig_improper(f, 0.0, 1.0, 0.1, 4, eps);24 fprintf(stderr, "%e\t%13.12f\t%d\n", eps, res, count);25 26 return 0;27

Page 517: Métodos Numéricos en Física

Parte VIITransformación de Fourier

Page 518: Métodos Numéricos en Física

Signal con ancho espectral limitado.|ν| ≤ νc .

1 Simplificacion:

fc(t) =

∫ ∞

−∞dνe−2πiνt fc(ν) =

∫ νc

−νc

dνe−2πiνt fc(ν)

2 Consequencia:

fc(ν) = ∆t∞∑

n=−∞e2πiνtn fc(tn), tn = τ0 + n∆t , ∆t =

12νc

3 Resulta:

fc(t) =

∫ νc

−νc

dνe−2πiνt fc(ν) =∞∑

n=−∞fc(tn)∆t

∫ νc

−νc

dνe2πiν(tn−t)

=∞∑

n=−∞fc(tn)

sin [2πνc(tn − t)]2πνc(tn − t)

=∞∑

n=−∞fc(tn)sinc [2πνc(tn − t)]

Page 519: Métodos Numéricos en Física

Signal con ancho espectral limitado.|ν| ≤ νc .

1 Simplificacion:

fc(t) =

∫ ∞

−∞dνe−2πiνt fc(ν) =

∫ νc

−νc

dνe−2πiνt fc(ν)

2 Consequencia:

fc(ν) = ∆t∞∑

n=−∞e2πiνtn fc(tn), tn = τ0 + n∆t , ∆t =

12νc

3 Resulta:

fc(t) =

∫ νc

−νc

dνe−2πiνt fc(ν) =∞∑

n=−∞fc(tn)∆t

∫ νc

−νc

dνe2πiν(tn−t)

=∞∑

n=−∞fc(tn)

sin [2πνc(tn − t)]2πνc(tn − t)

=∞∑

n=−∞fc(tn)sinc [2πνc(tn − t)]

Page 520: Métodos Numéricos en Física

Signal con ancho espectral limitado.|ν| ≤ νc .

1 Simplificacion:

fc(t) =

∫ ∞

−∞dνe−2πiνt fc(ν) =

∫ νc

−νc

dνe−2πiνt fc(ν)

2 Consequencia:

fc(ν) = ∆t∞∑

n=−∞e2πiνtn fc(tn), tn = τ0 + n∆t , ∆t =

12νc

3 Resulta:

fc(t) =

∫ νc

−νc

dνe−2πiνt fc(ν) =∞∑

n=−∞fc(tn)∆t

∫ νc

−νc

dνe2πiν(tn−t)

=∞∑

n=−∞fc(tn)

sin [2πνc(tn − t)]2πνc(tn − t)

=∞∑

n=−∞fc(tn)sinc [2πνc(tn − t)]

Page 521: Métodos Numéricos en Física

Teorema de muestra (sampling).

Teorema de muestra:Dado un signal fc(t) con ancho espectral limitado, es decir fc(ν) 6= 0solo para |ν| ≤ νc , resulta que:

fc(t) =∞∑

n=−∞fc(tn)sinc [2πνc(tn − t)]

donde tn = τ0 + n∆t (τ0 arbitrario), ∆t = 1/(2νc).

Page 522: Métodos Numéricos en Física

Inversion del teorema de muestra.

Calculemos la transformacion de Fourier:

fc(ν) =

∫ ∞

−∞dte2πiνt

∞∑n=−∞

fc(tn)sinc [2πνc(tn − t)]

=∞∑

n=−∞fc(tn)

∫ ∞

−∞dte2πiνt

∆t∫ νc

−νc

dν′e2πiν′(tn−t)

= ∆t∞∑

n=−∞fc(tn)

∫ νc

−νc

dν′e2πiν′tn∫ ∞

−∞dte2πi(ν−ν′)t︸ ︷︷ ︸=δ(ν−ν′)

= ∆t∞∑

n=−∞fc(tn)e2πiνtn

∫ νc

−νc

dν′−dΘ(ν − ν′)

dν′

= [Θ(ν + νc)−Θ(ν − νc)]︸ ︷︷ ︸=Π(ν)

∆t∞∑

n=−∞fc(tn)e2πiνtn

Page 523: Métodos Numéricos en Física

Transformacion discreta.

Para signal fc(t) con ancho espectral limitado (|ν| ≤ νc):

fc(ν) = Π(ν)∆t∞∑

n=−∞fc(tn)e2πiνtn

Usamos solo N puntos discretos:

fc(ν) ≈ Π(ν)∆tN−1∑n=0

fc(tn)e2πiνtn

¿Para que frecuencias ν esta expression es correcta?

Solucion: Para los N + 1 frecuencias

νm = m∆ν, ∆ν =2νc

N=

1N∆t

, m = −N2, . . . ,

N2

Porque usamos: fc(tn+N) = fc(tn)!

Page 524: Métodos Numéricos en Física

Transformacion discreta.

Para signal fc(t) con ancho espectral limitado (|ν| ≤ νc):

fc(ν) = Π(ν)∆t∞∑

n=−∞fc(tn)e2πiνtn

Usamos solo N puntos discretos:

fc(ν) ≈ Π(ν)∆tN−1∑n=0

fc(tn)e2πiνtn

¿Para que frecuencias ν esta expression es correcta?

Solucion: Para los N + 1 frecuencias

νm = m∆ν, ∆ν =2νc

N=

1N∆t

, m = −N2, . . . ,

N2

Porque usamos: fc(tn+N) = fc(tn)!

Page 525: Métodos Numéricos en Física

Suma de Fourier.

fc(νm) = Π(νm)∆tN−1∑n=0

fc(tn)e2πiνm tn = e2πiνmτ0∆tN−1∑n=0

fc(tn)e2πi mnN

︸ ︷︷ ︸=Fm

Suma de Fourier:Para los N (es numero pares) datos fn (n = 0, . . . ,N − 1) resultan susN + 1 transformaciones discretas de Fourier como:

Fm =N−1∑n=0

fne2πi mnN (m = −N

2, . . . ,

N2

)

donde los valores extremos son iguales:

F± N2

=N−1∑n=0

fne±iπn =N−1∑n=0

fn(−1)n

Page 526: Métodos Numéricos en Física

Suma de Fourier.

fc(νm) = Π(νm)∆tN−1∑n=0

fc(tn)e2πiνm tn = e2πiνmτ0∆tN−1∑n=0

fc(tn)e2πi mnN

︸ ︷︷ ︸=Fm

Suma de Fourier:Para los N (es numero pares) datos fn (n = 0, . . . ,N − 1) resultan susN + 1 transformaciones discretas de Fourier como:

Fm =N−1∑n=0

fne2πi mnN (m = −N

2, . . . ,

N2

)

donde los valores extremos son iguales:

F± N2

=N−1∑n=0

fne±iπn =N−1∑n=0

fn(−1)n

Page 527: Métodos Numéricos en Física

Complejitud computacional.

Fm =N−1∑n=0

fne2πi mnN

que se puede escribir como:

F− N2

...F0...

F N2

=

...

· · · W mn · · ·...

·

f0...

...fN−1

, W = e2πiN

Multiplicacion de matriz (N + 1)× N:

Ops(N) ∝ O(N2)

Page 528: Métodos Numéricos en Física

Pares versus impares.Gauss 1805; Cooley & Tukey en los años 60.

Dado N = 2k pares, resultan N/2 datos con indices pares y N/2datos con indices impares:

Fm =N−1∑n=0

fne2πi mnN

=

N2 −1∑k=0

f2k e2πi m(2k)N +

N2 −1∑k=0

f2k+1e2πi m(2k+1)N

= F (0)m,N + e2πi m

N F (1)m,N

donde la FT de las partes pares / impares de los N datos esta dadopor:

F (0)m,N =

N2 −1∑k=0

f2k e2πi mkN/2 , F (1)

m,N =

N2 −1∑k=0

f2k+1e2πi mkN/2

Page 529: Métodos Numéricos en Física

Separacion en pares e impares.

Entonces tenemos:

Fm = F (0)m,N + (WN)mF (1)

m,N , WN = e2πiN

Idea:Iteracion posible hasta transformacion de Fourier de solo un dato siN = 2k !

Page 530: Métodos Numéricos en Física

Separacion en pares e impares.

Entonces tenemos:

Fm = F (0)m,N + (WN)mF (1)

m,N , WN = e2πiN

Idea:Iteracion posible hasta transformacion de Fourier de solo un dato siN = 2k !

Page 531: Métodos Numéricos en Física

Iteracion.N = 2k .

Fmk N

Page 532: Métodos Numéricos en Física

Iteracion.N = 2k .

F (0)m,N + (WN)mF (1)

m,N

Fmk

k − 1 N/2

N

Page 533: Métodos Numéricos en Física

Iteracion.N = 2k .

FmNk

N/2k − 1 F (0)m,N + (WN)mF (1)

m,N

N/4k − 2[F (00)

m, N2

+ (W N2)mF (01)

m, N2

]+ (WN)m

[F (10)

m, N2

+ (W N2)mF (11)

m, N2

]

Page 534: Métodos Numéricos en Física

Iteracion.N = 2k .

F (0)m,N + (WN)mF (1)

m,N

Fm

...

k

k − 1

k − 2

...

0 1

N/4

...

N/2

N

[F (00)

m, N2

+ (W N2)mF (01)

m, N2

]+ (WN)m

[F (10)

m, N2

+ (W N2)mF (11)

m, N2

]

. . . (W2)m . . . F (0010011010)

m,2 . . .

Page 535: Métodos Numéricos en Física

Transformaciones de un punto.

¿Que es F (p1p2...pk )m,2 ?

Es una transformacion de Fourier de un dato:

F (p1p2...pk )m,2 = e4πimfn = fn

donde n depende de la combinacion p1p2 . . .pk :

n = n(p1p2 . . .pk )

Problema:¿Cual es la dependencia entre n y los p1p2 . . .pk ?

Page 536: Métodos Numéricos en Física

Transformaciones de un punto.

¿Que es F (p1p2...pk )m,2 ?

Es una transformacion de Fourier de un dato:

F (p1p2...pk )m,2 = e4πimfn = fn

donde n depende de la combinacion p1p2 . . .pk :

n = n(p1p2 . . .pk )

Problema:¿Cual es la dependencia entre n y los p1p2 . . .pk ?

Page 537: Métodos Numéricos en Física

Pares e impares en bits.¿A que combinacion p1p2 . . . pk corresponde el indice n de N = 2k datos?

Ejemplo con n = 7 de N = 24 = 16 datos:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Page 538: Métodos Numéricos en Física

Pares e impares en bits.¿A que combinacion p1p2 . . . pk corresponde el indice n de N = 2k datos?

Ejemplo con n = 7 de N = 24 = 16 datos:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

1 3 5 7 9 11 13 15(1)

Page 539: Métodos Numéricos en Física

Pares e impares en bits.¿A que combinacion p1p2 . . . pk corresponde el indice n de N = 2k datos?

Ejemplo con n = 7 de N = 24 = 16 datos:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

1 3 5 7 9 11 13 15

3 7 11 15(11)

(1)

Page 540: Métodos Numéricos en Física

Pares e impares en bits.¿A que combinacion p1p2 . . . pk corresponde el indice n de N = 2k datos?

Ejemplo con n = 7 de N = 24 = 16 datos:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

1 3 5 7 9 11 13 15

3 7 11 15

7 15(111)

(11)

(1)

Page 541: Métodos Numéricos en Física

Pares e impares en bits.¿A que combinacion p1p2 . . . pk corresponde el indice n de N = 2k datos?

Ejemplo con n = 7 de N = 24 = 16 datos:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

1 3 5 7 9 11 13 15

3 7 11 15

7 15

7(1110)

(111)

(11)

(1)

Page 542: Métodos Numéricos en Física

Pares e impares en bits.¿A que combinacion p1p2 . . . pk corresponde el indice n de N = 2k datos?

Ejemplo con n = 7 de N = 24 = 16 datos:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

1 3 5 7 9 11 13 15

3 7 11 15

7 15

7(1110)

(111)

(11)

(1)

Resultado: n = 7 corresponde a (p1p2p3p4) = (1110)!

Page 543: Métodos Numéricos en Física

Pares e impares en bits.¿A que combinacion p1p2 . . . pk corresponde el indice n de N = 2k datos?

Ejemplo con n = 7 de N = 24 = 16 datos:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

1 3 5 7 9 11 13 15

3 7 11 15

7 15

7(1110)

(111)

(11)

(1)

Resultado: n = 7 corresponde a (p1p2p3p4) = (1110)!Pero: n = 0111 en 4-bit representacion binaria (k = 4)!

Page 544: Métodos Numéricos en Física

Ejemplo.N = 22 = 4.

FmN = 4k = 2

Page 545: Métodos Numéricos en Física

Ejemplo.N = 22 = 4.

FmN = 4k = 2

21 F (0)m,4 + (W4)

mF (1)m,4

Page 546: Métodos Numéricos en Física

Ejemplo.N = 22 = 4.

FmN = 4k = 2

21 F (0)m,4 + (W4)

mF (1)m,4

10[F (00)

m,2 + (W2)mF (01)

m,2

]+ (W4)

m[F (10)

m,2 + (W2)mF (11)

m,2

]

Page 547: Métodos Numéricos en Física

Ejemplo.N = 22 = 4.

FmN = 4k = 2

21 F (0)m,4 + (W4)

mF (1)m,4

10[F (00)

m,2 + (W2)mF (01)

m,2

]+ (W4)

m[F (10)

m,2 + (W2)mF (11)

m,2

][f(00) + (W2)

m f(01)

]+ (W4)

m[f(10) + (W2)

m f(11)

]=

Page 548: Métodos Numéricos en Física

Ejemplo.N = 22 = 4.

FmN = 4k = 2

21 F (0)m,4 + (W4)

mF (1)m,4

10[F (00)

m,2 + (W2)mF (01)

m,2

]+ (W4)

m[F (10)

m,2 + (W2)mF (11)

m,2

]

=

=

[f(00) + (W2)

m f(01)

]+ (W4)

m[f(10) + (W2)

m f(11)

][f(00) + (W2)

mf(10)

]+ (W4)

m[f(01) + (W2)

mf(11)

]

Page 549: Métodos Numéricos en Física

Estrategia simple.00 01 10 11

f0 f1 f2 f3

Page 550: Métodos Numéricos en Física

Estrategia simple.

f0 f1 f2 f3

00 01 10 11

f0 f1 f2 f3Reversiónde Bits

Page 551: Métodos Numéricos en Física

Estrategia simple.

f0 f1 f2 f3

×(W2)m ×(W2)

m+ +

00 01 10 11

f0 f1 f2 f3Reversiónde Bits

Page 552: Métodos Numéricos en Física

Estrategia simple.

f0 f1 f2 f3

×(W2)m ×(W2)

m+ +

×(W4)m

+

Fm

00 01 10 11

f0 f1 f2 f3Reversiónde Bits

Page 553: Métodos Numéricos en Física

Complejitud computacional.Es muy pobre!

Complejitud computacional:

Para calcular un Fm:

Ops(N) = OpsBR(N) + (⊕+⊗)

(N2

+N4

+N8

+ . . .+ 1)

= OpsBR(N) + Nk−1∑n=0

(12

)n

= OpsBR(N) + 2N(

1− 1N

)= OpsBR(N) +O(N)

Problema:Para los N transformadas necesitamos tambien O(N2)!

Page 554: Métodos Numéricos en Física

Complejitud computacional.Es muy pobre!

Complejitud computacional:

Para calcular un Fm:

Ops(N) = OpsBR(N) + (⊕+⊗)

(N2

+N4

+N8

+ . . .+ 1)

= OpsBR(N) + Nk−1∑n=0

(12

)n

= OpsBR(N) + 2N(

1− 1N

)= OpsBR(N) +O(N)

Problema:Para los N transformadas necesitamos tambien O(N2)!

Page 555: Métodos Numéricos en Física

Idea.N = 22 = 4: m = −2, . . . ,+2.

1 En el primer paso, necesitamos para la frecuencia νm unamultiplicacion con (W2)

m:

(W2)m =

(e2πi/2

)m= (−1)m =

1, m = 0,±2

−1, m = ±1

2 En el segundo paso:

(W4)m =

(e2πi/4

)m= (i)m =

1, m = 0i , m = 1

−i , m = −1−1, m = ±2

Idea:Calcular las transformadas para todas frecuencias en paralelo!

Page 556: Métodos Numéricos en Física

Idea.N = 22 = 4: m = −2, . . . ,+2.

1 En el primer paso, necesitamos para la frecuencia νm unamultiplicacion con (W2)

m:

(W2)m =

(e2πi/2

)m= (−1)m =

1, m = 0,±2

−1, m = ±1

2 En el segundo paso:

(W4)m =

(e2πi/4

)m= (i)m =

1, m = 0i , m = 1

−i , m = −1−1, m = ±2

Idea:Calcular las transformadas para todas frecuencias en paralelo!

Page 557: Métodos Numéricos en Física

Idea.N = 22 = 4: m = −2, . . . ,+2.

1 En el primer paso, necesitamos para la frecuencia νm unamultiplicacion con (W2)

m:

(W2)m =

(e2πi/2

)m= (−1)m =

1, m = 0,±2

−1, m = ±1

2 En el segundo paso:

(W4)m =

(e2πi/4

)m= (i)m =

1, m = 0i , m = 1

−i , m = −1−1, m = ±2

Idea:Calcular las transformadas para todas frecuencias en paralelo!

Page 558: Métodos Numéricos en Física

Estrategia mas elaborada.N = 22 = 4, W2 = −1, W4 = i .

f0 f1 f2 f3

00 01 10 11

f0 f1 f2 f3Reversiónde Bits

Page 559: Métodos Numéricos en Física

Estrategia mas elaborada.N = 22 = 4, W2 = −1, W4 = i .

f0 f1 f2 f3

00 01 10 11

f0 f1 f2 f3Reversiónde Bits

m = 0,±2 m = 0,±2

×(W2)0 ×(W2)

0

Page 560: Métodos Numéricos en Física

Estrategia mas elaborada.N = 22 = 4, W2 = −1, W4 = i .

f0 f1 f2 f3

00 01 10 11

f0 f1 f2 f3Reversiónde Bits

m = 0,±2 m = ±1 m = 0,±2 m = ±1

×(W2)0 ×(W2)

0

×(W2)1 ×(W2)

1

Page 561: Métodos Numéricos en Física

Estrategia mas elaborada.N = 22 = 4, W2 = −1, W4 = i .

f0 f1 f2 f3

00 01 10 11

f0 f1 f2 f3Reversiónde Bits

m = 0,±2 m = ±1 m = 0,±2 m = ±1

m = 0

×(W4)0

×(W2)0 ×(W2)

0

×(W2)1 ×(W2)

1

Page 562: Métodos Numéricos en Física

Estrategia mas elaborada.N = 22 = 4, W2 = −1, W4 = i .

f0 f1 f2 f3

00 01 10 11

f0 f1 f2 f3Reversiónde Bits

m = 0,±2 m = ±1 m = 0,±2 m = ±1

m = 0 m = ±2

×(W4)0

×(W2)0 ×(W2)

0

×(W2)1 ×(W2)

1

×(W4)2

Page 563: Métodos Numéricos en Física

Estrategia mas elaborada.N = 22 = 4, W2 = −1, W4 = i .

f0 f1 f2 f3

00 01 10 11

f0 f1 f2 f3Reversiónde Bits

m = 0,±2 m = ±1 m = 0,±2 m = ±1

m = 0 m = 1 m = ±2

×(W4)0

×(W2)0 ×(W2)

0

×(W2)1 ×(W2)

1

×(W4)2

×(W4)1

Page 564: Métodos Numéricos en Física

Estrategia mas elaborada.N = 22 = 4, W2 = −1, W4 = i .

f0 f1 f2 f3

00 01 10 11

f0 f1 f2 f3Reversiónde Bits

m = 0,±2 m = ±1 m = 0,±2 m = ±1

m = 0 m = 1 m = ±2 m = −1

×(W4)0

×(W2)0 ×(W2)

0

×(W4)1

×(W4)2

×(W4)−1

×(W2)1×(W2)

1

Page 565: Métodos Numéricos en Física

Complejitud computacional.Ahora es mejor.

Complejitud computacional:

Para calcular todos los Fm:

Ops(N) = OpsBR(N) + log2(N)× N × (⊕+⊗)

= OpsBR(N) +O [N log2(N)]

¿Es mejor que O(N2)?

Falta:¿Complejitud computacional de la reversion de Bits?

Page 566: Métodos Numéricos en Física

Complejitud computacional.Ahora es mejor.

Complejitud computacional:

Para calcular todos los Fm:

Ops(N) = OpsBR(N) + log2(N)× N × (⊕+⊗)

= OpsBR(N) +O [N log2(N)]

¿Es mejor que O(N2)?

Falta:¿Complejitud computacional de la reversion de Bits?

Page 567: Métodos Numéricos en Física

Estrategia.

n = 00000000n = 0000 1011

Page 568: Métodos Numéricos en Física

Estrategia.

n+ = m;

n = 00000000n = 0000 1011

m = (n %2); (m = 1)

Page 569: Métodos Numéricos en Física

Estrategia.

n+ = m;

n = 000000 10

n = 00000000

n >>= 1;

n = 00000 101n <<= 1;

n = 0000 1011

(m = 1)m = (n %2);

Page 570: Métodos Numéricos en Física

Estrategia.

n+ = m;

n = 000000 10

n = 00000000

n+ = m;

n >>= 1;

n = 00000 101n <<= 1;

n = 0000 1011

m = (n %2);

m = (n %2);

(m = 1)

(m = 1)

Page 571: Métodos Numéricos en Física

Estrategia.

n+ = m;

n = 000000 10

n = 00000000

n = 000000 10 n = 00000 110

n+ = m;

n >>= 1;

n = 00000 101n <<= 1;

n >>= 1; n <<= 1;

n = 0000 1011

(m = 1)

(m = 1)

m = (n %2);

m = (n %2);

Page 572: Métodos Numéricos en Física

Estrategia.

n+ = m;

n = 000000 10

n = 00000000

n = 000000 10 n = 00000 110

n+ = m;

n+ = m;

n >>= 1;

n = 00000 101n <<= 1;

n >>= 1; n <<= 1;

n = 0000 1011

m = (n %2);

m = (n %2);

m = (n %2);

(m = 1)

(m = 1)

(m = 0)

Page 573: Métodos Numéricos en Física

Estrategia.

n+ = m;

n = 000000 10

n = 00000000

n = 000000 10 n = 00000 110

n+ = m;

n+ = m;

n = 0000000 1 n = 0000 1100

n >>= 1;

n = 00000 101n <<= 1;

n >>= 1; n <<= 1;

n >>= 1; n <<= 1;

n = 0000 1011

(m = 1)

(m = 1)

(m = 0)

m = (n %2);

m = (n %2);

m = (n %2);

Page 574: Métodos Numéricos en Física

Estrategia.

n+ = m;

n = 000000 10

n = 00000000

n = 000000 10 n = 00000 110

n+ = m;

n+ = m;

n = 0000000 1 n = 0000 1100

n+ = m;

n >>= 1;

n = 00000 101n <<= 1;

n >>= 1; n <<= 1;

n >>= 1; n <<= 1;

n = 0000 1011

m = (n %2);

m = (n %2);

m = (n %2);

m = (n %2);

(m = 1)

(m = 1)

(m = 0)

(m = 1)

Page 575: Métodos Numéricos en Física

Estrategia.

n+ = m;

n = 000000 10

n = 00000000

n = 000000 10 n = 00000 110

n+ = m;

n+ = m;

n = 0000000 1 n = 0000 1100

n+ = m;

n >>= 1;

n = 00000 101n <<= 1;

n >>= 1; n <<= 1;

n >>= 1; n <<= 1;

n = 0000 1011

n = 0000 1101

(m = 1)

(m = 1)

(m = 0)

(m = 1)

m = (n %2);

m = (n %2);

m = (n %2);

m = (n %2);

Page 576: Métodos Numéricos en Física

Complejitud computacional.

Complejitud computacional:

OpsBR(N) = (2× bitshift ++⊕)× log2(N) = O [log2(N)]

Transformacion rapida de Fourier (FFT):

Complejitud computacional:

Ops(N) = O [log2(N)] +O [N log2(N)]

= O [N log2(N)] O(N2)

Page 577: Métodos Numéricos en Física

Complejitud computacional.

Complejitud computacional:

OpsBR(N) = (2× bitshift ++⊕)× log2(N) = O [log2(N)]

Transformacion rapida de Fourier (FFT):

Complejitud computacional:

Ops(N) = O [log2(N)] +O [N log2(N)]

= O [N log2(N)] O(N2)

Page 578: Métodos Numéricos en Física

Implementacion.ft_bitrev.c

1 /*! \file ft_bitrev.c */2

3 #include <stdlib.h>4

5 /*! Returns ’n’ with ’bits’ numbers of bits bit-reversed. */6 size_t bit_reverse(size_t n, size_t bits)7 8 size_t m, nrev;9

10 nrev = 0;11 m = 0;12 do 13 nrev <<= 1; /* shift bits of nrev to left */14 nrev += (n % 2); /* lowest bit of n -> highest bit of nrev */15 n >>= 1; /* shift bits of n to right */16 m++; /* we did one more bit */17 while (m < bits);18

19 return nrev;20

Page 579: Métodos Numéricos en Física

Idea del programa.ft_fft.c

000 001 010 011 100 101 110 111

Page 580: Métodos Numéricos en Física

Idea del programa.ft_fft.c

000 001 010 011 100 101 110 111

blocks = N2

lines = 1points = 2

lo=0 hi=1b=0 b=1 b=2 b=3

Page 581: Métodos Numéricos en Física

Idea del programa.ft_fft.c

000 001 010 011 100 101 110 111

blocks = N4

blocks = N2

points = 4

lines = 1points = 2

lines = 2

lo=0

lo=0

hi=1

hi=2

b=0 b=1 b=2 b=3

b=0 b=1

Page 582: Métodos Numéricos en Física

Idea del programa.ft_fft.c

000 001 010 011 100 101 110 111

blocks = N4

blocks = N2

blocks = N8

points = 4

points = 8

lines = 1points = 2

lines = 2

lines = 4

lo=0

lo=0

lo=0

hi=1

hi=2

hi=4

b=0 b=1 b=2 b=3

b=0 b=1

b=0

Page 583: Métodos Numéricos en Física

Recursion para W mN .

Para cada numero N hay que calcular:

W mN = e2πi m

N = W m−1N exp

(2πiN

), W±N/2

N = e±iπ = −1;

Para cada N fijo una recursion con respecto a m:

Valores iniciales:

W− N2

N = −1, a = exp(

2πiN

)Recursion: w → a ·w results in: w *= (1− z) con z = 1− a, quees lo mismo que: w -= (z ∗ w).Calculacion de z:

z = 1− exp(

2πiN

)= 2 sin2

( πN

)− i sin

(2πN

)

Page 584: Métodos Numéricos en Física

Recursion para W mN .

Para cada numero N hay que calcular:

W mN = e2πi m

N = W m−1N exp

(2πiN

), W±N/2

N = e±iπ = −1;

Para cada N fijo una recursion con respecto a m:

Valores iniciales:

W− N2

N = −1, a = exp(

2πiN

)Recursion: w → a ·w results in: w *= (1− z) con z = 1− a, quees lo mismo que: w -= (z ∗ w).Calculacion de z:

z = 1− exp(

2πiN

)= 2 sin2

( πN

)− i sin

(2πN

)

Page 585: Métodos Numéricos en Física

Recursion para W mN .

Para cada numero N hay que calcular:

W mN = e2πi m

N = W m−1N exp

(2πiN

), W±N/2

N = e±iπ = −1;

Para cada N fijo una recursion con respecto a m:

Valores iniciales:

W− N2

N = −1, a = exp(

2πiN

)Recursion: w → a ·w results in: w *= (1− z) con z = 1− a, quees lo mismo que: w -= (z ∗ w).Calculacion de z:

z = 1− exp(

2πiN

)= 2 sin2

( πN

)− i sin

(2πN

)

Page 586: Métodos Numéricos en Física

Implementacion.ft_fft.c

1 /*! \file ft_fft.c */2

3 #define _XOPEN_SOURCE 5004 #define _ISOC99_SOURCE5

6 #include <math.h>7 #include <stdlib.h>8 #include <complex.h>9

10 size_t bit_reverse(size_t, size_t);11

12 /* Calculates the Fourier (inveres if ’isign=-1’) sum13 of 2^’bits’ ’data’ and saves result in ’data’. */14 void fft(complex double *data, size_t bits, int isign)15 16 complex double tmp, w, z;17 double wtmp, delta;18 size_t blocks, points, lines;19 size_t b, l, k;20 size_t lo, hi;

Page 587: Métodos Numéricos en Física

Implementacion.ft_fft.c

22 /* Bit-reversal of the data: */23 points = (1 << bits);24 for (k = 0; k < points; k++) 25 b = bit_reverse(k, bits);26 if (b > k) 27 tmp = data[k];28 data[k] = data[b];29 data[b] = tmp;30 31

Page 588: Métodos Numéricos en Física

Implementacion.ft_fft.c

33 blocks = (points >> 1); /* blocks=points/2 */34 points = 2;35 lines = 1;36 for (k = 0; k < bits; k++) 37 lo = 0;38

39 /* start recurrence for trigonometrics */40 delta = isign * 2.0 * M_PI / points;41 wtmp = sin(0.5 * delta);42 z = 2.0 * wtmp * wtmp - I * sin(delta);

Page 589: Métodos Numéricos en Física

Implementacion.ft_fft.c

44 for (b = 0; b < blocks; b++) 45 w = 1.0;46 hi = lo + lines;47 for (l = 0; l < lines; l++) 48 tmp = w * data[hi+l];49 data[hi+l] = data[lo+l] - tmp;50 data[lo+l] += tmp;51 w -= (z * w);52 53 lo += points;54 55 blocks >>= 1;56 lines <<= 1;57 points <<= 1;58 59

Page 590: Métodos Numéricos en Física

Resultado.main_ft_fft.c

1 #define _XOPEN_SOURCE 5002 #define _ISOC99_SOURCE3

4 #include <math.h>5 #include <stdio.h>6 #include <stdlib.h>7 #include <complex.h>8

9 /* #define PI 3.1415 */10 #define bits 811 #define N 25612 #define XMAX 2.013 #define DX XMAX/N14 #define VC 0.5/DX15

16 void fft(complex double*, size_t, int);17

18 double a, b;19

20 complex double function(double x)21 22 return exp(-a * x * x) + b * (rand()/((double)RAND_MAX)-0.5);23

Page 591: Métodos Numéricos en Física

Resultado.main_ft_fft.c

25 double xvalue(size_t n)26 27 return XMAX * (n - 0.5 * N) / N;28 29

30 double freqvalue(int n)31 32 return n * 2.0 * VC / N;33 34

35 complex double factor(int n)36 37 return exp(-M_PI*I*freqvalue(n)*XMAX);38 39

40 int main(void)41 42 complex double data[N];43 size_t n;44 double x;45 complex double res;

Page 592: Métodos Numéricos en Física

Resultado.main_ft_fft.c

47 a = 100.0;48 b = 0.0;49 for (n = 0; n < N; n++) 50 x = xvalue(n);51 data[n] = function(x);52 printf("%f %f %f\n", x, creal(data[n]), cimag(data[n]));53 54 printf("\n\n");55

56 fft(data, bits, 1);57 for (n = N/2+1; n < N; n++) 58 res = data[n] * factor(n-N);59 printf("%f %f %f\n", freqvalue(n-N), creal(res), cimag(res));60 61 for (n = 0; n <= N/2; n++) 62 res = data[n] * factor(n);63 printf("%f %f %f\n", freqvalue(n), creal(res), cimag(res));64 65 printf("\n\n");

Page 593: Métodos Numéricos en Física

Resultado.main_ft_fft.c

67 fft(data, bits, -1);68 for (n = 0; n < N; n++) 69 x = xvalue(n);70 printf("%f %f %f\n", x, creal(data[n])/N, cimag(data[n])/N);71 72 printf("\n\n");73

74 a = 100.0;75 b = 0.2;76 for (n = 0; n < N; n++) 77 x = xvalue(n);78 data[n] = function(x);79 printf("%f %f %f\n", x, creal(data[n]), cimag(data[n]));80 81 printf("\n\n");

Page 594: Métodos Numéricos en Física

Resultado.main_ft_fft.c

83 fft(data, bits, 1);84 for (n = N/2+1; n < N; n++) 85 res = data[n] * factor(n-N);86 printf("%f %f %f\n", freqvalue(n-N), creal(res), cimag(res));87 88 for (n = 0; n <= N/2; n++) 89 res = data[n] * factor(n);90 printf("%f %f %f\n", freqvalue(n), creal(res), cimag(res));91 92 printf("\n\n");93

94 fft(data, bits, -1);95 for (n = 0; n < N; n++) 96 x = xvalue(n);97 printf("%f %f %f\n", x, creal(data[n])/N, cimag(data[n])/N);98 99 return 0;

100

Page 595: Métodos Numéricos en Física

Ejemplo.Funcion de Gauss sin y con ruido.

0

0.2

0.4

0.6

0.8

1

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1

f(t)

t

Page 596: Métodos Numéricos en Física

Ejemplo.Funcion de Gauss sin y con ruido.

−25

−20

−15

−10

−5

0

5

10

15

20

25

−0.001 −0.0008 −0.0006 −0.0004 −0.0002 0 0.0002 0.0004 0.0006 0.0008 0.001ν

f(ν)

Page 597: Métodos Numéricos en Física

Ejemplo.Funcion de Gauss sin y con ruido.

−0.2

0

0.2

0.4

0.6

0.8

1

1.2

−1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1

f(t)

t

Page 598: Métodos Numéricos en Física

Ejemplo.Funcion de Gauss sin y con ruido.

−25

−20

−15

−10

−5

0

5

10

15

20

25

−0.001 −0.0008 −0.0006 −0.0004 −0.0002 0 0.0002 0.0004 0.0006 0.0008 0.001

f(ν)

ν

Page 599: Métodos Numéricos en Física

Parte VIIIAproximación de Chebyshev

Page 600: Métodos Numéricos en Física

Polinomial de Chebyshev.

Polinomial de Chebyshev:

Tn(x) = cos [n arc cos(x)] , x ∈ [−1,1]

Parece trigonometrico pero es un polinomial de orden n.Tiene recursiónSon ortogonalSon completos

Page 601: Métodos Numéricos en Física

¿Es un polinomial?

Como x ∈ [−1,1] podemos usar x = cos(θ):

Tn(x) = cos(nθ) = <(einθ)

Podemos escribir entonces (usando suma binomial):

Tn(x) = <[cos(θ) + i sin(θ)]n

= <

n∑k=0

(nk

)[cos(θ)]n−k [i sin(θ)]k

Parte real solo terminos con k pares y sin2(θ) = 1− x2:

Tn(x) =

[ n2 ]∑

k=0

(n

2k

)[cos(θ)]n−2k (−1)k [sin(θ)]2k

=

[ n2 ]∑

k=0

(n

2k

)(−1)k xn−2k (1− x2)k

q.e.d.

Page 602: Métodos Numéricos en Física

¿Es un polinomial?

Como x ∈ [−1,1] podemos usar x = cos(θ):

Tn(x) = cos(nθ) = <(einθ)

Podemos escribir entonces (usando suma binomial):

Tn(x) = <[cos(θ) + i sin(θ)]n

= <

n∑k=0

(nk

)[cos(θ)]n−k [i sin(θ)]k

Parte real solo terminos con k pares y sin2(θ) = 1− x2:

Tn(x) =

[ n2 ]∑

k=0

(n

2k

)[cos(θ)]n−2k (−1)k [sin(θ)]2k

=

[ n2 ]∑

k=0

(n

2k

)(−1)k xn−2k (1− x2)k

q.e.d.

Page 603: Métodos Numéricos en Física

¿Es un polinomial?

Como x ∈ [−1,1] podemos usar x = cos(θ):

Tn(x) = cos(nθ) = <(einθ)

Podemos escribir entonces (usando suma binomial):

Tn(x) = <[cos(θ) + i sin(θ)]n

= <

n∑k=0

(nk

)[cos(θ)]n−k [i sin(θ)]k

Parte real solo terminos con k pares y sin2(θ) = 1− x2:

Tn(x) =

[ n2 ]∑

k=0

(n

2k

)[cos(θ)]n−2k (−1)k [sin(θ)]2k

=

[ n2 ]∑

k=0

(n

2k

)(−1)k xn−2k (1− x2)k

q.e.d.

Page 604: Métodos Numéricos en Física

Ejemplos.

Primeros polinomiales de Chebyshev:

T0(x) = 1T1(x) = xT2(x) = 2x2 − 1T3(x) = 4x3 − 3xT4(x) = 8x4 − 8x2 + 1

...

Page 605: Métodos Numéricos en Física

Recursión.

Como cos(a± b) = cos(a) cos(b)∓ sin(a) sin(b):

Tn+1(x) = cos [(n + 1)θ]

= cos(nθ) cos(θ)− sin(nθ) sin(θ)

= 2 cos(nθ) cos(θ)− cos(nθ) cos(θ) + sin(nθ) sin(θ)= 2 cos(nθ) cos(θ)− cos [(n − 1)θ]

= 2xTn(x)− Tn−1(x)

Recursión para polinomiales de Chebyshev:

Tn+1(x) = 2xTn(x)− Tn−1(x)

Page 606: Métodos Numéricos en Física

Recursión.

Como cos(a± b) = cos(a) cos(b)∓ sin(a) sin(b):

Tn+1(x) = cos [(n + 1)θ]

= cos(nθ) cos(θ)− sin(nθ) sin(θ)

= 2 cos(nθ) cos(θ)− cos(nθ) cos(θ) + sin(nθ) sin(θ)= 2 cos(nθ) cos(θ)− cos [(n − 1)θ]

= 2xTn(x)− Tn−1(x)

Recursión para polinomiales de Chebyshev:

Tn+1(x) = 2xTn(x)− Tn−1(x)

Page 607: Métodos Numéricos en Física

Ortogonalidad.

La relación de ortogonalidad es:

∫ 1

−1dx(1− x2)− 1

2 Tm(x)Tn(x) =

0 si m 6= nπ2 si m = n 6= 0π si m = n = 0

Page 608: Métodos Numéricos en Física

Prueba.

∫ 1

−1dx(1− x2)− 1

2 cos [m arc cos(x)] cos [n arc cos(x)]

Substitución x = cos(θ), θ ∈ [π,0]:

=

∫ π

0dθ

sin(θ)√1− cos2(θ)

cos [mθ] cos [nθ]

=

∫ π

0dθ cos [mθ] cos [nθ]

=14

∫ π

0dθ[eimθ + e−imθ] [einθ + e−inθ]

=12

[sin[(m + n)θ]

(m + n)+

sin[(m − n)θ]

(m − n)

]π0

=12

0 si m 6= nπ si m = n 6= 0

2π si m = n = 0q.e.d.

Page 609: Métodos Numéricos en Física

¿Como se ve?

−1

−0.5

0

0.5

1

−1 −0.5 0 0.5 1

T n(x

)

x

n = 0

Page 610: Métodos Numéricos en Física

¿Como se ve?

−1

−0.5

0

0.5

1

−1 −0.5 0 0.5 1

T n(x

)

x

n = 1

Page 611: Métodos Numéricos en Física

¿Como se ve?

−1

−0.5

0

0.5

1

−1 −0.5 0 0.5 1

T n(x

)

x

n = 2

Page 612: Métodos Numéricos en Física

¿Como se ve?

−1

−0.5

0

0.5

1

−1 −0.5 0 0.5 1

T n(x

)

x

n = 3

Page 613: Métodos Numéricos en Física

¿Como se ve?

−1

−0.5

0

0.5

1

−1 −0.5 0 0.5 1

T n(x

)

x

n = 4

Page 614: Métodos Numéricos en Física

Ceros.

Buscamos los ceros x (n)k del polinomial Tn(x):

Tn(x(n)k ) = cos[n arc cos(x (n)

k )] = 0

Es equivalente a:

n arc cos(x (n)k ) = (2k + 1)

π

2

Entonces tiene n ceros en el intervalo [−1,1]:

x (n)k = cos

[π(k + 1

2

)n

](k = 0, . . . ,n − 1)

Page 615: Métodos Numéricos en Física

Ceros.

Buscamos los ceros x (n)k del polinomial Tn(x):

Tn(x(n)k ) = cos[n arc cos(x (n)

k )] = 0

Es equivalente a:

n arc cos(x (n)k ) = (2k + 1)

π

2

Entonces tiene n ceros en el intervalo [−1,1]:

x (n)k = cos

[π(k + 1

2

)n

](k = 0, . . . ,n − 1)

Page 616: Métodos Numéricos en Física

Ortogonalidad discreta.

Ortogonalidad discreta:

n−1∑k=0

Ti

(x (n)

k

)Tj

(x (n)

k

)=

0, i 6= jn2 , i = j 6= 0n, i = j = 0

=n2δi,j(1 + δi,0)

donde x (n)k son los ceros de: Tn(x

(n)k ) = 0 y i , j < n.

Page 617: Métodos Numéricos en Física

Consequencia.

Expansión general de una función f (x) con x ∈ [−1,1]:

f (x) =∞∑i=0

diTi(x)

Con N fijo, los valores en los ceros x (N)k son:

f(

x (N)k

)=

∞∑j=0

djTj

(x (N)

k

)Consequencia:

N−1∑k=0

Ti

(x (N)

k

)f(

x (N)k

)=

∞∑j=0

dj

N−1∑k=0

Ti

(x (N)

k

)Tj

(x (N)

k

)

=N−1∑j=0

djN2δi,j(1 + δi,0) = di

N2

(1 + δi,0)

Page 618: Métodos Numéricos en Física

Consequencia.

Expansión general de una función f (x) con x ∈ [−1,1]:

f (x) =∞∑i=0

diTi(x)

Con N fijo, los valores en los ceros x (N)k son:

f(

x (N)k

)=

∞∑j=0

djTj

(x (N)

k

)Consequencia:

N−1∑k=0

Ti

(x (N)

k

)f(

x (N)k

)=

∞∑j=0

dj

N−1∑k=0

Ti

(x (N)

k

)Tj

(x (N)

k

)

=N−1∑j=0

djN2δi,j(1 + δi,0) = di

N2

(1 + δi,0)

Page 619: Métodos Numéricos en Física

Consequencia.

Expansión general de una función f (x) con x ∈ [−1,1]:

f (x) =∞∑i=0

diTi(x)

Con N fijo, los valores en los ceros x (N)k son:

f(

x (N)k

)=

∞∑j=0

djTj

(x (N)

k

)Consequencia:

N−1∑k=0

Ti

(x (N)

k

)f(

x (N)k

)=

∞∑j=0

dj

N−1∑k=0

Ti

(x (N)

k

)Tj

(x (N)

k

)

=N−1∑j=0

djN2δi,j(1 + δi,0) = di

N2

(1 + δi,0)

Page 620: Métodos Numéricos en Física

Formula de aproximación.

Vamos a definir:

ci =2N

N−1∑k=0

Ti

(x (N)

k

)f(

x (N)k

)= di(1 + δi,0)

Entonces:

f(

x (N)k

)=

N−1∑j=0

djTj

(x (N)

k

)=

N−1∑j=0

cjTj

(x (N)

k

)− c0

2

Se puede usar como aproximación también:

f (x) ≈N−1∑j=0

cjTj (x)− c0

2

Page 621: Métodos Numéricos en Física

Formula de aproximación.

Vamos a definir:

ci =2N

N−1∑k=0

Ti

(x (N)

k

)f(

x (N)k

)= di(1 + δi,0)

Entonces:

f(

x (N)k

)=

N−1∑j=0

djTj

(x (N)

k

)=

N−1∑j=0

cjTj

(x (N)

k

)− c0

2

Se puede usar como aproximación también:

f (x) ≈N−1∑j=0

cjTj (x)− c0

2

Page 622: Métodos Numéricos en Física

Formula de aproximación.

Vamos a definir:

ci =2N

N−1∑k=0

Ti

(x (N)

k

)f(

x (N)k

)= di(1 + δi,0)

Entonces:

f(

x (N)k

)=

N−1∑j=0

djTj

(x (N)

k

)=

N−1∑j=0

cjTj

(x (N)

k

)− c0

2

Se puede usar como aproximación también:

f (x) ≈N−1∑j=0

cjTj (x)− c0

2

Page 623: Métodos Numéricos en Física

Aproximación de Chebyshev.

Aproximación de Chebyshev (preliminario):

f (x) ≈N−1∑j=0

cjTj (x)− c0

2

donde:

ci =2N

N−1∑k=0

Ti

(x (N)

k

)f(

x (N)k

)Es un polinomial de orden N − 1.

Es exacto para x = x (N)k .

Pregunta:

¿Es mejor que otra aproximación polinomial del mismo orden?Respuesta: No!

Page 624: Métodos Numéricos en Física

Aproximación de Chebyshev.

Aproximación de Chebyshev (preliminario):

f (x) ≈N−1∑j=0

cjTj (x)− c0

2

donde:

ci =2N

N−1∑k=0

Ti

(x (N)

k

)f(

x (N)k

)Es un polinomial de orden N − 1.

Es exacto para x = x (N)k .

Pregunta:

¿Es mejor que otra aproximación polinomial del mismo orden?Respuesta: No!

Page 625: Métodos Numéricos en Física

Bajar el orden.La verdadera aproximación de Chebyshev.

Aproximación de Chebyshev:

ci =2N

N−1∑k=0

Ti

(x (N)

k

)f(

x (N)k

)Usar solo M N de los coeficientes:

f (x) ≈M−1∑j=0

cjTj (x)− c0

2

Page 626: Métodos Numéricos en Física

Error.

¿Cual es el error?

Si N 1 los c0, . . . , cN−1 son casi perfecto.Los cj estan disminuendo: cj+1 ≤ cj , entonces el error de unatruncación M N es:

error ≈ cMTM(x)

TM(x) tiene M + 1 extrema y entonces el error es distribuido casihomogeneamente en [−1,1]!

Ventaja:

Con la aproximación de Chebyshev se puede obtener unaaproximación polinomial con un orden muy bajo con propiedadesoptimales.

Page 627: Métodos Numéricos en Física

Error.

¿Cual es el error?

Si N 1 los c0, . . . , cN−1 son casi perfecto.Los cj estan disminuendo: cj+1 ≤ cj , entonces el error de unatruncación M N es:

error ≈ cMTM(x)

TM(x) tiene M + 1 extrema y entonces el error es distribuido casihomogeneamente en [−1,1]!

Ventaja:

Con la aproximación de Chebyshev se puede obtener unaaproximación polinomial con un orden muy bajo con propiedadesoptimales.

Page 628: Métodos Numéricos en Física

Error.

¿Cual es el error?

Si N 1 los c0, . . . , cN−1 son casi perfecto.Los cj estan disminuendo: cj+1 ≤ cj , entonces el error de unatruncación M N es:

error ≈ cMTM(x)

TM(x) tiene M + 1 extrema y entonces el error es distribuido casihomogeneamente en [−1,1]!

Ventaja:

Con la aproximación de Chebyshev se puede obtener unaaproximación polinomial con un orden muy bajo con propiedadesoptimales.

Page 629: Métodos Numéricos en Física

Error.

¿Cual es el error?

Si N 1 los c0, . . . , cN−1 son casi perfecto.Los cj estan disminuendo: cj+1 ≤ cj , entonces el error de unatruncación M N es:

error ≈ cMTM(x)

TM(x) tiene M + 1 extrema y entonces el error es distribuido casihomogeneamente en [−1,1]!

Ventaja:

Con la aproximación de Chebyshev se puede obtener unaaproximación polinomial con un orden muy bajo con propiedadesoptimales.

Page 630: Métodos Numéricos en Física

Error.

¿Cual es el error?

Si N 1 los c0, . . . , cN−1 son casi perfecto.Los cj estan disminuendo: cj+1 ≤ cj , entonces el error de unatruncación M N es:

error ≈ cMTM(x)

TM(x) tiene M + 1 extrema y entonces el error es distribuido casihomogeneamente en [−1,1]!

Ventaja:

Con la aproximación de Chebyshev se puede obtener unaaproximación polinomial con un orden muy bajo con propiedadesoptimales.

Page 631: Métodos Numéricos en Física

Cambio del intervalo.

Tenemos una función f (x) con x ∈ [a,b] donde a < b arbitrarios.Hay que substituir: x → ξ donde ξ ∈ [−1,1]:

ξ =x − b+a

2b−a

2

Inversión es:x =

b + a2

+b − a

Page 632: Métodos Numéricos en Física

Cambio del intervalo.

Tenemos una función f (x) con x ∈ [a,b] donde a < b arbitrarios.Hay que substituir: x → ξ donde ξ ∈ [−1,1]:

ξ =x − b+a

2b−a

2

Inversión es:x =

b + a2

+b − a

Page 633: Métodos Numéricos en Física

Cambio del intervalo.

Tenemos una función f (x) con x ∈ [a,b] donde a < b arbitrarios.Hay que substituir: x → ξ donde ξ ∈ [−1,1]:

ξ =x − b+a

2b−a

2

Inversión es:x =

b + a2

+b − a

Page 634: Métodos Numéricos en Física

Implementación.ch_coef.c

1 /*! \file ch_coef.c */2

3 #define _XOPEN_SOURCE 5004 #define _ISOC99_SOURCE5

6 #include <math.h>7 #include <stdlib.h>8

9 /*! Calculates the Chebyshev coeficients ’c[0], ..., c[n-1]’10 for the funcion ’f’ being defined in the interval11 [’a’,’b’]. */12 void chebyshev_coef(double (*f)(double), double a, double b,13 double* c, int n)14 15 int k, j;16 double bma, bpa, fac, tmp, *value;

Page 635: Métodos Numéricos en Física

Implementación.ch_coef.c

18 value = malloc(n * sizeof(double));19 bma = 0.5 * (b - a);20 bpa = 0.5 * (b + a);21 for (k = 0; k < n; k++) 22 tmp = cos(M_PI * (k + 0.5) / n);23 value[k] = f(tmp * bma + bpa);24 25 fac = 2.0 / n;26 for (j = 0; j < n; j++) 27 tmp = 0.0;28 for (k = 0; k < n; k++)29 tmp += value[k] * cos(M_PI * j * (k + 0.5) / n);30 c[j] = fac * tmp;31 32 free(value);33

Page 636: Métodos Numéricos en Física

Calcular la aproximación de Chebyshev.

Problema:Usando los coeficientes ci hay que calcular ahora la aproximación deChebyshev:

f (x) ≈M−1∑j=0

cjTj [ξ(x)]− c0

2

donde ξ(x) = [2x − (b + a)]/(b − a) ∈ [−1,1]

¿Como vamos a calcular eso?

Directamente como una suma. (Uhhps...!)Como una suma pero usando recursión para Tn(x). (Uhhps...!)Usando la recursión de Clenshaw. (Excelente!)

Page 637: Métodos Numéricos en Física

Calcular la aproximación de Chebyshev.

Problema:Usando los coeficientes ci hay que calcular ahora la aproximación deChebyshev:

f (x) ≈M−1∑j=0

cjTj [ξ(x)]− c0

2

donde ξ(x) = [2x − (b + a)]/(b − a) ∈ [−1,1]

¿Como vamos a calcular eso?

Directamente como una suma. (Uhhps...!)Como una suma pero usando recursión para Tn(x). (Uhhps...!)Usando la recursión de Clenshaw. (Excelente!)

Page 638: Métodos Numéricos en Física

Calcular la aproximación de Chebyshev.

Problema:Usando los coeficientes ci hay que calcular ahora la aproximación deChebyshev:

f (x) ≈M−1∑j=0

cjTj [ξ(x)]− c0

2

donde ξ(x) = [2x − (b + a)]/(b − a) ∈ [−1,1]

¿Como vamos a calcular eso?

Directamente como una suma. (Uhhps...!)Como una suma pero usando recursión para Tn(x). (Uhhps...!)Usando la recursión de Clenshaw. (Excelente!)

Page 639: Métodos Numéricos en Física

Calcular la aproximación de Chebyshev.

Problema:Usando los coeficientes ci hay que calcular ahora la aproximación deChebyshev:

f (x) ≈M−1∑j=0

cjTj [ξ(x)]− c0

2

donde ξ(x) = [2x − (b + a)]/(b − a) ∈ [−1,1]

¿Como vamos a calcular eso?

Directamente como una suma. (Uhhps...!)Como una suma pero usando recursión para Tn(x). (Uhhps...!)Usando la recursión de Clenshaw. (Excelente!)

Page 640: Métodos Numéricos en Física

Calcular la aproximación de Chebyshev.

Problema:Usando los coeficientes ci hay que calcular ahora la aproximación deChebyshev:

f (x) ≈M−1∑j=0

cjTj [ξ(x)]− c0

2

donde ξ(x) = [2x − (b + a)]/(b − a) ∈ [−1,1]

¿Como vamos a calcular eso?

Directamente como una suma. (Uhhps...!)Como una suma pero usando recursión para Tn(x). (Uhhps...!)Usando la recursión de Clenshaw. (Excelente!)

Page 641: Métodos Numéricos en Física

Clenshaw para Chebyshev.Nosotros tenemos la suma:

fCA(x) =M−1∑j=0

cjTj [ξ(x)]− c0

2, Tn+1(ξ) = 2ξTn(ξ)− Tn−1(ξ)

Con Clenshaw tenemos:

Coeficientes: αn(ξ) = 2ξ, βn(ξ) = −1Recursión: hM+1(ξ) = hM(ξ) = 0

hn(ξ) = 2ξhn+1(ξ)− hn+2(ξ) + cn (n = M − 1, . . . ,0)

Resultado:

fCA [x(ξ)] = h0(ξ)T0(ξ) + h1(ξ) [T1(ξ)− α0(ξ)T0(ξ)]−c0

2

= h0(ξ)− ξh1(ξ)−c0

2

Page 642: Métodos Numéricos en Física

Clenshaw para Chebyshev.Nosotros tenemos la suma:

fCA(x) =M−1∑j=0

cjTj [ξ(x)]− c0

2, Tn+1(ξ) = 2ξTn(ξ)− Tn−1(ξ)

Con Clenshaw tenemos:

Coeficientes: αn(ξ) = 2ξ, βn(ξ) = −1Recursión: hM+1(ξ) = hM(ξ) = 0

hn(ξ) = 2ξhn+1(ξ)− hn+2(ξ) + cn (n = M − 1, . . . ,0)

Resultado:

fCA [x(ξ)] = h0(ξ)T0(ξ) + h1(ξ) [T1(ξ)− α0(ξ)T0(ξ)]−c0

2

= h0(ξ)− ξh1(ξ)−c0

2

Page 643: Métodos Numéricos en Física

Clenshaw para Chebyshev.Nosotros tenemos la suma:

fCA(x) =M−1∑j=0

cjTj [ξ(x)]− c0

2, Tn+1(ξ) = 2ξTn(ξ)− Tn−1(ξ)

Con Clenshaw tenemos:

Coeficientes: αn(ξ) = 2ξ, βn(ξ) = −1Recursión: hM+1(ξ) = hM(ξ) = 0

hn(ξ) = 2ξhn+1(ξ)− hn+2(ξ) + cn (n = M − 1, . . . ,0)

Resultado:

fCA [x(ξ)] = h0(ξ)T0(ξ) + h1(ξ) [T1(ξ)− α0(ξ)T0(ξ)]−c0

2

= h0(ξ)− ξh1(ξ)−c0

2

Page 644: Métodos Numéricos en Física

Clenshaw para Chebyshev.Nosotros tenemos la suma:

fCA(x) =M−1∑j=0

cjTj [ξ(x)]− c0

2, Tn+1(ξ) = 2ξTn(ξ)− Tn−1(ξ)

Con Clenshaw tenemos:

Coeficientes: αn(ξ) = 2ξ, βn(ξ) = −1Recursión: hM+1(ξ) = hM(ξ) = 0

hn(ξ) = 2ξhn+1(ξ)− hn+2(ξ) + cn (n = M − 1, . . . ,0)

Resultado:

fCA [x(ξ)] = h0(ξ)T0(ξ) + h1(ξ) [T1(ξ)− α0(ξ)T0(ξ)]−c0

2

= h0(ξ)− ξh1(ξ)−c0

2

Page 645: Métodos Numéricos en Física

Clenshaw para Chebyshev.Nosotros tenemos la suma:

fCA(x) =M−1∑j=0

cjTj [ξ(x)]− c0

2, Tn+1(ξ) = 2ξTn(ξ)− Tn−1(ξ)

Con Clenshaw tenemos:

Coeficientes: αn(ξ) = 2ξ, βn(ξ) = −1Recursión: hM+1(ξ) = hM(ξ) = 0

hn(ξ) = 2ξhn+1(ξ)− hn+2(ξ) + cn (n = M − 1, . . . ,0)

Resultado:

fCA [x(ξ)] = h0(ξ)T0(ξ) + h1(ξ) [T1(ξ)− α0(ξ)T0(ξ)]−c0

2

= h0(ξ)− ξh1(ξ)−c0

2

Page 646: Métodos Numéricos en Física

Implementación.ch_approx.c

1 /*! \file ch_approx.c */2

3 #include <assert.h>4

5 /*! Calculates the Chebyshev approximation at the value ’x’6 within the interval [’a’,’b’] using ’m’ of the Chebyshev7 coeficients ’c[]’. */8 double chebyshev_approx(double x, double a, double b,9 double* c, int m)

10 11 double alpha, h_new, h, h_old;12 int n;13

14 assert((a <= x) && (x <= b));15 alpha = 2.0 * (2.0 * x - (a + b)) / (b - a);16 h_old = 0.0; h = 0.0;17 for (n = m-1; n >= 0; n--) 18 h_new = alpha * h - h_old + c[n];19 h_old = h;20 h = h_new;21 22 return h - 0.5 *( alpha * h_old + c[0]);23

Page 647: Métodos Numéricos en Física

Resultado.main_ch_approx.c

1 #include <math.h>2 #include <stdio.h>3

4 #define GAMMA 0.15 #define X0 0.16 #define XMAX 0.57

8 double function1(double x)9

10 double res;11 res = 0.0008 / (x*x + 0.001* GAMMA*GAMMA);12 res += 1.0 / ((x-X0)*(x-X0) + GAMMA*GAMMA);13 return res;14 15

16 double function2(double x)17 18 double res;19 res = 1.0 / ((x-X0)*(x-X0) + GAMMA*GAMMA);20 return res;21

Page 648: Métodos Numéricos en Física

Resultado.main_ch_approx.c

22

23 void chebyshev_coef(double (*)(double), double, double,24 double*, int);25 double chebyshev_approx(double, double, double, double*,26 int);27

28 int main(void)29 30 double x, c[200];31

32 for (x = -XMAX; x <= XMAX; x += 0.005)33 printf("%g %g %g\n",34 x, function1(x), function2(x));35 printf("\n\n");36

37 chebyshev_coef(function2, -XMAX, XMAX, c, 5);38 for (x = -XMAX; x <= XMAX; x += 0.005)39 printf("%g %g\n",40 x, chebyshev_approx(x, -XMAX, XMAX, c, 5));41 printf("\n\n");

Page 649: Métodos Numéricos en Física

Resultado.main_ch_approx.c

43 chebyshev_coef(function2, -XMAX, XMAX, c, 10);44 for (x = -XMAX; x <= XMAX; x += 0.005)45 printf("%g %g\n",46 x, chebyshev_approx(x, -XMAX, XMAX, c, 10));47 printf("\n\n");48

49 chebyshev_coef(function2, -XMAX, XMAX, c, 20);50 for (x = -XMAX; x <= XMAX; x += 0.005)51 printf("%g %g\n",52 x, chebyshev_approx(x, -XMAX, XMAX, c, 20));53 printf("\n\n");54

55 chebyshev_coef(function2, -XMAX, XMAX, c, 20);56 for (x = -XMAX; x <= XMAX; x += 0.005)57 printf("%g %g\n",58 x, chebyshev_approx(x, -XMAX, XMAX, c, 10));59 printf("\n\n");60

61 chebyshev_coef(function1, -XMAX, XMAX, c, 100);62 for (x = -XMAX; x <= XMAX; x += 0.005)63 printf("%g %g\n",64 x, chebyshev_approx(x, -XMAX, XMAX, c, 100));65 printf("\n\n");

Page 650: Métodos Numéricos en Física

Resultado.main_ch_approx.c

67 chebyshev_coef(function1, -XMAX, XMAX, c, 200);68 for (x = -XMAX; x <= XMAX; x += 0.005)69 printf("%g %g\n",70 x, chebyshev_approx(x, -XMAX, XMAX, c, 200));71 printf("\n\n");72

73 return 0;74

Page 651: Métodos Numéricos en Física

Ejemplos.

0

20

40

60

80

100

−0.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 0.5

f(x)

x

f (x)Chebyshev 5/5

Page 652: Métodos Numéricos en Física

Ejemplos.

0

20

40

60

80

100

−0.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 0.5

f(x)

x

f (x)Chebyshev 10/10

Page 653: Métodos Numéricos en Física

Ejemplos.

0

20

40

60

80

100

−0.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 0.5

f(x)

x

f (x)Chebyshev 20/20

Page 654: Métodos Numéricos en Física

Ejemplos.

0

20

40

60

80

100

−0.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 0.5

f(x)

x

f (x)Chebyshev 10/20

Page 655: Métodos Numéricos en Física

Ejemplos.

0

20

40

60

80

100

120

−0.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 0.5

f(x)

x

f (x)Chebyshev 100/100

Page 656: Métodos Numéricos en Física

Ejemplos.

0

20

40

60

80

100

120

−0.5 −0.4 −0.3 −0.2 −0.1 0 0.1 0.2 0.3 0.4 0.5

f(x)

x

f (x)Chebyshev 200/200

Page 657: Métodos Numéricos en Física

Integral de una aproximación de Chebyshev.Tenemos la aproximación de Chebyshev de una funcion f (x),x ∈ [−1,1], a través de los coeficientes cn:

fCA(x) =M−1∑j=0

cjTj [ξ(x)]− c0

2

Queremos saber la integral de esta función aproximada:

FCA(x) =

∫ x

dx ′fCA(x ′) =M−1∑j=0

cj

∫ x

dx ′Tj [ξ(x ′)]−c0

2x + const

=b − a

2

M−1∑j=1

cj

∫ ξ(x)

dξTj(ξ) +c0

2x + const

¿Cuál es la integral del polinomial de Chebyshev?

∫ ξ

dξ′Tn(ξ′) =?

Page 658: Métodos Numéricos en Física

Integral de una aproximación de Chebyshev.Tenemos la aproximación de Chebyshev de una funcion f (x),x ∈ [−1,1], a través de los coeficientes cn:

fCA(x) =M−1∑j=0

cjTj [ξ(x)]− c0

2

Queremos saber la integral de esta función aproximada:

FCA(x) =

∫ x

dx ′fCA(x ′) =M−1∑j=0

cj

∫ x

dx ′Tj [ξ(x ′)]−c0

2x + const

=b − a

2

M−1∑j=1

cj

∫ ξ(x)

dξTj(ξ) +c0

2x + const

¿Cuál es la integral del polinomial de Chebyshev?

∫ ξ

dξ′Tn(ξ′) =?

Page 659: Métodos Numéricos en Física

Integral de una aproximación de Chebyshev.Tenemos la aproximación de Chebyshev de una funcion f (x),x ∈ [−1,1], a través de los coeficientes cn:

fCA(x) =M−1∑j=0

cjTj [ξ(x)]− c0

2

Queremos saber la integral de esta función aproximada:

FCA(x) =

∫ x

dx ′fCA(x ′) =M−1∑j=0

cj

∫ x

dx ′Tj [ξ(x ′)]−c0

2x + const

=b − a

2

M−1∑j=1

cj

∫ ξ(x)

dξTj(ξ) +c0

2x + const

¿Cuál es la integral del polinomial de Chebyshev?

∫ ξ

dξ′Tn(ξ′) =?

Page 660: Métodos Numéricos en Física

Integral de Tn(ξ).Substitución ξ′ = cos(θ).

=

∫ ξ

dξ′ cos[n arc cos(ξ′)]

= −∫ arc cos(ξ)

dθ sin(θ) cos(nθ)

= − 14i

∫ arc cos(ξ)

dθ(

eiθ − e−iθ) (einθ + e−inθ)= − 1

4i

ei(n+1)θ

i(n + 1)− e−i(n+1)θ

−i(n + 1)− ei(n−1)θ

i(n − 1)+

e−i(n−1)

−i(n − 1)

θ=arc cos(ξ)

=14

ei(n+1)θ

n + 1+

e−i(n+1)θ

n + 1− ei(n−1)θ

n − 1− e−i(n−1)

n − 1

θ=arc cos(ξ)

=cos[(n + 1) arc cos(ξ)]

2(n + 1)− cos[(n − 1) arc cos(ξ)]

2(n − 1)

=Tn+1(ξ)

2(n + 1)− Tn−1(ξ)

2(n − 1)

Page 661: Métodos Numéricos en Física

Nuevos coeficientes.

Entonces la integral de la aproximación de Chebyshev es:

FCA(x) =b − a

2

M−1∑n=1

cn

∫ ξ(x)

dξ′Tn(ξ′) +

c0

2x + const

=b − a

2

M−1∑n=1

cn

[Tn+1[ξ(x)]

2(n + 1)− Tn−1[ξ(x)]

2(n − 1)

]+

c0

2x + const

=b − a

2

M∑

n=2

cn−1Tn[ξ(x)]

2n−

M−2∑n=0

cn+1Tn[ξ(x)]

2n

+b − a

2c0

2T1[ξ(x)] + const

Page 662: Métodos Numéricos en Física

Nuevos coeficientes.Entonces la integral de la aproximación de Chebyshev es:

=b − a

2

cM−1

2MTM [ξ(x)] +

cM−2

2(M − 1)TM−1[ξ(x)]

+M−2∑n=2

cn−1 − cn+1

2n︸ ︷︷ ︸∝Cn

Tn[ξ(x)] +c0 − c2

2︸ ︷︷ ︸∝C1

T1[ξ(x)]

+ const

≈M−1∑n=1

CnTn[ξ(x)] + const

=

M−1∑n=0

CnTn[ξ(x)]− C0

2

+ const

donde los nuevos coeficientes son:

Cn =b − a

4n(cn−1 − cn+1) (n > 0), C0 = 0

Page 663: Métodos Numéricos en Física

Implementación.ch_coefint.c

1 /*! \file ch_coefint.c */2

3 /*! Calculates Chebyshev coeficients ’cint[]’ for the4 integral of a function described by ’c[]’. */5 void chebyshev_coefint(double* cint, double* c, double a,6 double b, int n)7 8 int j;9 double factor, sum, sgn;

10

11 factor = 0.25 * (b-a);12 sum = 0.0;13 sgn = 1.0;14 for (j = 1; j < n-1; j++) 15 cint[j] = factor * (c[j-1] - c[j+1]) / j;16 sum += sgn * cint[j];17 sgn = -sgn;18 19 cint[n-1]= factor * c[n-2] / (n-1);20 sum += sgn * cint[n-1];21 cint[0] = 2.0 * sum; /* integral at x=a is zero */22

Page 664: Métodos Numéricos en Física

Derivada.

Queremos la derivada:

ddx

fCA(x) = f ′CA(x) =M−1∑n=0

cn∂

∂xTn[ξ(x)]

Pero ya sabemos la regla fCA → FCA: cn → Cn!Entonces hay que invertir eso (Cn → cn, cn → c′n) con elresultado:

f ′CA(x) =M−1∑n=0

c′nTn[ξ(x)]−c′02

donde los coeficientes se calculan a través de la recursión:

c′n−1 = c′n+1 +4n

b − acn

Page 665: Métodos Numéricos en Física

Derivada.

Queremos la derivada:

ddx

fCA(x) = f ′CA(x) =M−1∑n=0

cn∂

∂xTn[ξ(x)]

Pero ya sabemos la regla fCA → FCA: cn → Cn!Entonces hay que invertir eso (Cn → cn, cn → c′n) con elresultado:

f ′CA(x) =M−1∑n=0

c′nTn[ξ(x)]−c′02

donde los coeficientes se calculan a través de la recursión:

c′n−1 = c′n+1 +4n

b − acn

Page 666: Métodos Numéricos en Física

Derivada.

Queremos la derivada:

ddx

fCA(x) = f ′CA(x) =M−1∑n=0

cn∂

∂xTn[ξ(x)]

Pero ya sabemos la regla fCA → FCA: cn → Cn!Entonces hay que invertir eso (Cn → cn, cn → c′n) con elresultado:

f ′CA(x) =M−1∑n=0

c′nTn[ξ(x)]−c′02

donde los coeficientes se calculan a través de la recursión:

c′n−1 = c′n+1 +4n

b − acn

Page 667: Métodos Numéricos en Física

Implementación.ch_coefder.c

1 /*! \file ch_coefder.c */2

3 /*! Calculates the coeficients ’cder[]’ for the derivative4 of the function corresponding to ’c[]’. */5 void chder(double* cder, double* c, double a, double b, int n)6 7 int j;8 double factor;9

10 factor = 4.0 / (b - a);11 cder[n-1] = 0.0;12 cder[n-2] = factor * (n - 1.0) * c[n-1];13 for (j = n-3; j >= 0; j--)14 cder[j] = cder[j+2] + factor * (j + 1.0) * c[j+1];15

Page 668: Métodos Numéricos en Física

Parte IXNúmeros aleatorios

Page 669: Métodos Numéricos en Física

¿Para qué numeros aleatorios?

Generacion de data con ruido como simulacion de datosexperimentales para probar estabilidad de programas.Integracion multi-dimensional: Monte-Carlo algoritmos.Ecuaciones diferenciales estochasticas: Movimiento Brown,Ecuaciones de Langevin.Resolver una ecuacion maestra: Trayectorias cuanticas.Simulacion de eventos probabilisticos.

Page 670: Métodos Numéricos en Física

¿Para qué numeros aleatorios?

Generacion de data con ruido como simulacion de datosexperimentales para probar estabilidad de programas.Integracion multi-dimensional: Monte-Carlo algoritmos.Ecuaciones diferenciales estochasticas: Movimiento Brown,Ecuaciones de Langevin.Resolver una ecuacion maestra: Trayectorias cuanticas.Simulacion de eventos probabilisticos.

Page 671: Métodos Numéricos en Física

¿Para qué numeros aleatorios?

Generacion de data con ruido como simulacion de datosexperimentales para probar estabilidad de programas.Integracion multi-dimensional: Monte-Carlo algoritmos.Ecuaciones diferenciales estochasticas: Movimiento Brown,Ecuaciones de Langevin.Resolver una ecuacion maestra: Trayectorias cuanticas.Simulacion de eventos probabilisticos.

Page 672: Métodos Numéricos en Física

¿Para qué numeros aleatorios?

Generacion de data con ruido como simulacion de datosexperimentales para probar estabilidad de programas.Integracion multi-dimensional: Monte-Carlo algoritmos.Ecuaciones diferenciales estochasticas: Movimiento Brown,Ecuaciones de Langevin.Resolver una ecuacion maestra: Trayectorias cuanticas.Simulacion de eventos probabilisticos.

Page 673: Métodos Numéricos en Física

¿Para qué numeros aleatorios?

Generacion de data con ruido como simulacion de datosexperimentales para probar estabilidad de programas.Integracion multi-dimensional: Monte-Carlo algoritmos.Ecuaciones diferenciales estochasticas: Movimiento Brown,Ecuaciones de Langevin.Resolver una ecuacion maestra: Trayectorias cuanticas.Simulacion de eventos probabilisticos.

Page 674: Métodos Numéricos en Física

Problema.

Maquina deterministica:

Una maquina deterministica (computador) no es capaz de generarnumeros aleatorios!

Compromiso:

Computador produce sequencias s de numeros pseudo-aleatoriosN(s)

i .

1 Se repiten despues una sequencia de largo L: N(s)i+L = N(s)

i .

2 Tienen correlaciones en la sequencia: 〈N(s)i N(s)

j 〉 6= δi,j .

3 Tienen correlaciones entre sequencias: 〈N(s)i N(q)

i 〉 6= δs,q .

Page 675: Métodos Numéricos en Física

Problema.

Maquina deterministica:

Una maquina deterministica (computador) no es capaz de generarnumeros aleatorios!

Compromiso:

Computador produce sequencias s de numeros pseudo-aleatoriosN(s)

i .

1 Se repiten despues una sequencia de largo L: N(s)i+L = N(s)

i .

2 Tienen correlaciones en la sequencia: 〈N(s)i N(s)

j 〉 6= δi,j .

3 Tienen correlaciones entre sequencias: 〈N(s)i N(q)

i 〉 6= δs,q .

Page 676: Métodos Numéricos en Física

Problema.

Maquina deterministica:

Una maquina deterministica (computador) no es capaz de generarnumeros aleatorios!

Compromiso:

Computador produce sequencias s de numeros pseudo-aleatoriosN(s)

i .

1 Se repiten despues una sequencia de largo L: N(s)i+L = N(s)

i .

2 Tienen correlaciones en la sequencia: 〈N(s)i N(s)

j 〉 6= δi,j .

3 Tienen correlaciones entre sequencias: 〈N(s)i N(q)

i 〉 6= δs,q .

Page 677: Métodos Numéricos en Física

Problema.

Maquina deterministica:

Una maquina deterministica (computador) no es capaz de generarnumeros aleatorios!

Compromiso:

Computador produce sequencias s de numeros pseudo-aleatoriosN(s)

i .

1 Se repiten despues una sequencia de largo L: N(s)i+L = N(s)

i .

2 Tienen correlaciones en la sequencia: 〈N(s)i N(s)

j 〉 6= δi,j .

3 Tienen correlaciones entre sequencias: 〈N(s)i N(q)

i 〉 6= δs,q .

Page 678: Métodos Numéricos en Física

Problema.

Maquina deterministica:

Una maquina deterministica (computador) no es capaz de generarnumeros aleatorios!

Compromiso:

Computador produce sequencias s de numeros pseudo-aleatoriosN(s)

i .

1 Se repiten despues una sequencia de largo L: N(s)i+L = N(s)

i .

2 Tienen correlaciones en la sequencia: 〈N(s)i N(s)

j 〉 6= δi,j .

3 Tienen correlaciones entre sequencias: 〈N(s)i N(q)

i 〉 6= δs,q .

Page 679: Métodos Numéricos en Física

Numeros aleatorios en C.

En el header “stdlib.h” existen declaraciones para funciones denumeros aleatorios:

void srand(unsigned seed):Para inicialisar la sequencia de numeros “aleatorios”. Para cadavalor de seed sale una sequencia de numeros pseudo-aleatorios.#define RAND_MAX ...:Se producen numeros en el intervalo [0, RAND_MAX].int rand(void):Da un valor de la sequencia de numeros aleatorios en el intervalo[0,RAND_MAX].

Aplicacion por ejemplo como:#include <time.h>double x;srand(time(NULL);x = rand() / ((double)RAND_MAX);

Page 680: Métodos Numéricos en Física

Numeros aleatorios en C.

En el header “stdlib.h” existen declaraciones para funciones denumeros aleatorios:

void srand(unsigned seed):Para inicialisar la sequencia de numeros “aleatorios”. Para cadavalor de seed sale una sequencia de numeros pseudo-aleatorios.#define RAND_MAX ...:Se producen numeros en el intervalo [0, RAND_MAX].int rand(void):Da un valor de la sequencia de numeros aleatorios en el intervalo[0,RAND_MAX].

Aplicacion por ejemplo como:#include <time.h>double x;srand(time(NULL);x = rand() / ((double)RAND_MAX);

Page 681: Métodos Numéricos en Física

Problemas con rand().

Tipicamente RAND_MAX = 32767 que produce un intervalopequeño:x = rand() / ((double)RAND_MAX) ∈ [0,1] con unagranularidad gruesa!Algoritmo es malo (generador lineal congruencial):

1 Sequencia se repite con L =RAND_MAX+1.2 Hay correlaciones muy fuertes.

Page 682: Métodos Numéricos en Física

Problemas con rand().

Tipicamente RAND_MAX = 32767 que produce un intervalopequeño:x = rand() / ((double)RAND_MAX) ∈ [0,1] con unagranularidad gruesa!Algoritmo es malo (generador lineal congruencial):

1 Sequencia se repite con L =RAND_MAX+1.2 Hay correlaciones muy fuertes.

Page 683: Métodos Numéricos en Física

Problemas con rand().

Tipicamente RAND_MAX = 32767 que produce un intervalopequeño:x = rand() / ((double)RAND_MAX) ∈ [0,1] con unagranularidad gruesa!Algoritmo es malo (generador lineal congruencial):

1 Sequencia se repite con L =RAND_MAX+1.2 Hay correlaciones muy fuertes.

Page 684: Métodos Numéricos en Física

Problemas con rand().

Tipicamente RAND_MAX = 32767 que produce un intervalopequeño:x = rand() / ((double)RAND_MAX) ∈ [0,1] con unagranularidad gruesa!Algoritmo es malo (generador lineal congruencial):

1 Sequencia se repite con L =RAND_MAX+1.2 Hay correlaciones muy fuertes.

Page 685: Métodos Numéricos en Física

Generador lineal congruencial.Lo mas simple que se puede hacer.

Algoritmo es una recursion:

rn+1 = arn + c (mod m)

donde:a > 0 integro es el multiplicadorc > 0 integro es el incrementom > 0 integro es el moduloLos valores estan en el intervalo [0,m − 1] y se repiten despuesL = m numeros.

Page 686: Métodos Numéricos en Física

Generador lineal congruencial.Lo mas simple que se puede hacer.

Algoritmo es una recursion:

rn+1 = arn + c (mod m)

donde:a > 0 integro es el multiplicadorc > 0 integro es el incrementom > 0 integro es el moduloLos valores estan en el intervalo [0,m − 1] y se repiten despuesL = m numeros.

Page 687: Métodos Numéricos en Física

Generador lineal congruencial.Lo mas simple que se puede hacer.

Algoritmo es una recursion:

rn+1 = arn + c (mod m)

donde:a > 0 integro es el multiplicadorc > 0 integro es el incrementom > 0 integro es el moduloLos valores estan en el intervalo [0,m − 1] y se repiten despuesL = m numeros.

Page 688: Métodos Numéricos en Física

Generador lineal congruencial.Lo mas simple que se puede hacer.

Algoritmo es una recursion:

rn+1 = arn + c (mod m)

donde:a > 0 integro es el multiplicadorc > 0 integro es el incrementom > 0 integro es el moduloLos valores estan en el intervalo [0,m − 1] y se repiten despuesL = m numeros.

Page 689: Métodos Numéricos en Física

Generador lineal congruencial.Lo mas simple que se puede hacer.

Algoritmo es una recursion:

rn+1 = arn + c (mod m)

donde:a > 0 integro es el multiplicadorc > 0 integro es el incrementom > 0 integro es el moduloLos valores estan en el intervalo [0,m − 1] y se repiten despuesL = m numeros.

Page 690: Métodos Numéricos en Física

Ejemplo.

Ejemplo: generador lineal congruencial con parametros: a = 65,c = 17, m = 4

Sea el valor inicial (seed) r0 = 1.r1 = 65 ∗ 1 + 19 (mod 4) = 84 %4 = 0r2 = 65 ∗ 0 + 19 (mod 4) = 19 %4 = 3r3 = 65 ∗ 3 + 19 (mod 4) = 214 %4 = 2r4 = 65 ∗ 2 + 19 (mod 4) = 149 %4 = 1Entonces tenemos la secuencia: 1,0,3,2,1,0,3,2, . . .

Page 691: Métodos Numéricos en Física

Ejemplo.

Ejemplo: generador lineal congruencial con parametros: a = 65,c = 17, m = 4

Sea el valor inicial (seed) r0 = 1.r1 = 65 ∗ 1 + 19 (mod 4) = 84 %4 = 0r2 = 65 ∗ 0 + 19 (mod 4) = 19 %4 = 3r3 = 65 ∗ 3 + 19 (mod 4) = 214 %4 = 2r4 = 65 ∗ 2 + 19 (mod 4) = 149 %4 = 1Entonces tenemos la secuencia: 1,0,3,2,1,0,3,2, . . .

Page 692: Métodos Numéricos en Física

Ejemplo.

Ejemplo: generador lineal congruencial con parametros: a = 65,c = 17, m = 4

Sea el valor inicial (seed) r0 = 1.r1 = 65 ∗ 1 + 19 (mod 4) = 84 %4 = 0r2 = 65 ∗ 0 + 19 (mod 4) = 19 %4 = 3r3 = 65 ∗ 3 + 19 (mod 4) = 214 %4 = 2r4 = 65 ∗ 2 + 19 (mod 4) = 149 %4 = 1Entonces tenemos la secuencia: 1,0,3,2,1,0,3,2, . . .

Page 693: Métodos Numéricos en Física

Ejemplo.

Ejemplo: generador lineal congruencial con parametros: a = 65,c = 17, m = 4

Sea el valor inicial (seed) r0 = 1.r1 = 65 ∗ 1 + 19 (mod 4) = 84 %4 = 0r2 = 65 ∗ 0 + 19 (mod 4) = 19 %4 = 3r3 = 65 ∗ 3 + 19 (mod 4) = 214 %4 = 2r4 = 65 ∗ 2 + 19 (mod 4) = 149 %4 = 1Entonces tenemos la secuencia: 1,0,3,2,1,0,3,2, . . .

Page 694: Métodos Numéricos en Física

Ejemplo.

Ejemplo: generador lineal congruencial con parametros: a = 65,c = 17, m = 4

Sea el valor inicial (seed) r0 = 1.r1 = 65 ∗ 1 + 19 (mod 4) = 84 %4 = 0r2 = 65 ∗ 0 + 19 (mod 4) = 19 %4 = 3r3 = 65 ∗ 3 + 19 (mod 4) = 214 %4 = 2r4 = 65 ∗ 2 + 19 (mod 4) = 149 %4 = 1Entonces tenemos la secuencia: 1,0,3,2,1,0,3,2, . . .

Page 695: Métodos Numéricos en Física

Ejemplo.

Ejemplo: generador lineal congruencial con parametros: a = 65,c = 17, m = 4

Sea el valor inicial (seed) r0 = 1.r1 = 65 ∗ 1 + 19 (mod 4) = 84 %4 = 0r2 = 65 ∗ 0 + 19 (mod 4) = 19 %4 = 3r3 = 65 ∗ 3 + 19 (mod 4) = 214 %4 = 2r4 = 65 ∗ 2 + 19 (mod 4) = 149 %4 = 1Entonces tenemos la secuencia: 1,0,3,2,1,0,3,2, . . .

Page 696: Métodos Numéricos en Física

Ejemplo.

Ejemplo: generador lineal congruencial con parametros: a = 65,c = 17, m = 4

Sea el valor inicial (seed) r0 = 1.r1 = 65 ∗ 1 + 19 (mod 4) = 84 %4 = 0r2 = 65 ∗ 0 + 19 (mod 4) = 19 %4 = 3r3 = 65 ∗ 3 + 19 (mod 4) = 214 %4 = 2r4 = 65 ∗ 2 + 19 (mod 4) = 149 %4 = 1Entonces tenemos la secuencia: 1,0,3,2,1,0,3,2, . . .

Page 697: Métodos Numéricos en Física

Correlaciones.

1 Tenemos una secuencia de L = m numeros pseudo-aleatorios.2 Vamos a construir d-dimensionales vectores como:

r0r1...

rd−1

,

rd

rd+1...

r2d−1

, . . .

3 Todos estos vectores se localisan como puntos en m1/d − 1planos, cada plano es (d − 1)-dimensional. Posiciones yorientaciones de los planos dependen de a y c.

Alerta Roja:

Estos son correlaciones muy fuertes!

Page 698: Métodos Numéricos en Física

Correlaciones.

1 Tenemos una secuencia de L = m numeros pseudo-aleatorios.2 Vamos a construir d-dimensionales vectores como:

r0r1...

rd−1

,

rd

rd+1...

r2d−1

, . . .

3 Todos estos vectores se localisan como puntos en m1/d − 1planos, cada plano es (d − 1)-dimensional. Posiciones yorientaciones de los planos dependen de a y c.

Alerta Roja:

Estos son correlaciones muy fuertes!

Page 699: Métodos Numéricos en Física

Correlaciones.

1 Tenemos una secuencia de L = m numeros pseudo-aleatorios.2 Vamos a construir d-dimensionales vectores como:

r0r1...

rd−1

,

rd

rd+1...

r2d−1

, . . .

3 Todos estos vectores se localisan como puntos en m1/d − 1planos, cada plano es (d − 1)-dimensional. Posiciones yorientaciones de los planos dependen de a y c.

Alerta Roja:

Estos son correlaciones muy fuertes!

Page 700: Métodos Numéricos en Física

Correlaciones.

1 Tenemos una secuencia de L = m numeros pseudo-aleatorios.2 Vamos a construir d-dimensionales vectores como:

r0r1...

rd−1

,

rd

rd+1...

r2d−1

, . . .

3 Todos estos vectores se localisan como puntos en m1/d − 1planos, cada plano es (d − 1)-dimensional. Posiciones yorientaciones de los planos dependen de a y c.

Alerta Roja:

Estos son correlaciones muy fuertes!

Page 701: Métodos Numéricos en Física

Pequeño programa.main_de_corr.c

1 #include <stdio.h>2

3 #define M 644

5 int main(void)6 7 int a, c, r[M], n;8

9 a = 165;10 c = 87;11

12 r[0] = 1;13 for (n = 1; n < M; n++)14 r[n] = (a * r[n-1] + c) % M;15

16 for (n = 0; n < M-1; n += 2)17 printf("%d %d\n", r[n], r[n+1]);18

19 return 0;20

Page 702: Métodos Numéricos en Física

Correlaciones - 2D vectores.m = 64, a = 165, c = 87.

0

10

20

30

40

50

60

0 10 20 30 40 50 60

Page 703: Métodos Numéricos en Física

¿Que necesitamos?

1 Intervalo de numeros Rn ∈ [0,Rmax] con Rmax mucho mas grandepara reducir la granularidad del numero aleatorio tipo puntoflotante:

xn = Rn/Rmax ∈ [0,1]

Eso significa reemplazar int por un tipo integro con mas bits,por ejemplo long long int (64bit).

2 Periodo de la secuencia L tiene que ser mucho mas grande ycontrolable, es decir conocido.

3 Reducir las correlaciones fuertemente.

Page 704: Métodos Numéricos en Física

¿Que necesitamos?

1 Intervalo de numeros Rn ∈ [0,Rmax] con Rmax mucho mas grandepara reducir la granularidad del numero aleatorio tipo puntoflotante:

xn = Rn/Rmax ∈ [0,1]

Eso significa reemplazar int por un tipo integro con mas bits,por ejemplo long long int (64bit).

2 Periodo de la secuencia L tiene que ser mucho mas grande ycontrolable, es decir conocido.

3 Reducir las correlaciones fuertemente.

Page 705: Métodos Numéricos en Física

¿Que necesitamos?

1 Intervalo de numeros Rn ∈ [0,Rmax] con Rmax mucho mas grandepara reducir la granularidad del numero aleatorio tipo puntoflotante:

xn = Rn/Rmax ∈ [0,1]

Eso significa reemplazar int por un tipo integro con mas bits,por ejemplo long long int (64bit).

2 Periodo de la secuencia L tiene que ser mucho mas grande ycontrolable, es decir conocido.

3 Reducir las correlaciones fuertemente.

Page 706: Métodos Numéricos en Física

Algoritmo multiplicativo congruencial.Otra posibilidad.

Tambien es una recursion, pero mas simple:

rn+1 = arn (mod m)

Es mas simple (mas rapido).Correlaciones no son mas fuertes.Hay que evitar r0 = 0 como valor inicial.

Page 707: Métodos Numéricos en Física

Algoritmo multiplicativo congruencial.Otra posibilidad.

Tambien es una recursion, pero mas simple:

rn+1 = arn (mod m)

Es mas simple (mas rapido).Correlaciones no son mas fuertes.Hay que evitar r0 = 0 como valor inicial.

Page 708: Métodos Numéricos en Física

Algoritmo multiplicativo congruencial.Otra posibilidad.

Tambien es una recursion, pero mas simple:

rn+1 = arn (mod m)

Es mas simple (mas rapido).Correlaciones no son mas fuertes.Hay que evitar r0 = 0 como valor inicial.

Page 709: Métodos Numéricos en Física

Algoritmo multiplicativo congruencial.Otra posibilidad.

Tambien es una recursion, pero mas simple:

rn+1 = arn (mod m)

Es mas simple (mas rapido).Correlaciones no son mas fuertes.Hay que evitar r0 = 0 como valor inicial.

Page 710: Métodos Numéricos en Física

Park & Miller.

Parametros de Park & Miller:

a = 75 = 16807m = 231 − 1 = 2,147,483,647

Resultados en un intervalo [0,2,147,483,646]. Se necesita por lomenos unsigned long int que tiene valor maximal4,294,967,295.Secuencia tiene largo L = m = 2,147,483,647.Multiplicacion a× rn resulta en valores mas grandes queunsigned long int. Entonces se necesita long long intque es 64bit (existe solo en ANSI C99).

Page 711: Métodos Numéricos en Física

Park & Miller.

Parametros de Park & Miller:

a = 75 = 16807m = 231 − 1 = 2,147,483,647

Resultados en un intervalo [0,2,147,483,646]. Se necesita por lomenos unsigned long int que tiene valor maximal4,294,967,295.Secuencia tiene largo L = m = 2,147,483,647.Multiplicacion a× rn resulta en valores mas grandes queunsigned long int. Entonces se necesita long long intque es 64bit (existe solo en ANSI C99).

Page 712: Métodos Numéricos en Física

Park & Miller.

Parametros de Park & Miller:

a = 75 = 16807m = 231 − 1 = 2,147,483,647

Resultados en un intervalo [0,2,147,483,646]. Se necesita por lomenos unsigned long int que tiene valor maximal4,294,967,295.Secuencia tiene largo L = m = 2,147,483,647.Multiplicacion a× rn resulta en valores mas grandes queunsigned long int. Entonces se necesita long long intque es 64bit (existe solo en ANSI C99).

Page 713: Métodos Numéricos en Física

Park & Miller.

Parametros de Park & Miller:

a = 75 = 16807m = 231 − 1 = 2,147,483,647

Resultados en un intervalo [0,2,147,483,646]. Se necesita por lomenos unsigned long int que tiene valor maximal4,294,967,295.Secuencia tiene largo L = m = 2,147,483,647.Multiplicacion a× rn resulta en valores mas grandes queunsigned long int. Entonces se necesita long long intque es 64bit (existe solo en ANSI C99).

Page 714: Métodos Numéricos en Física

Implementacion.rn_parkmiller.c

En C89 no habia long long int, por eso el programa (veNumerical Recipes version 2) es bien complicado — en C99 es trivial:

1 /*! \file rn_parkmiller.c */2

3 #define RND_M 2147483647LL4 #define RND_A 16807LL5 #define RND_CONVERSION (1.0/RND_M)6

7 /*! Calculates random numbers with an multiplicative8 congruential algorithm using the parameters9 following Park & Miller. ’irnd’ is a pointer

10 to the seed (inicial) value, that will be changed11 and used during the calculation. */12 double rand_parkmiller(long long int* irnd)13 14 (*irnd) = (RND_A * (*irnd)) % RND_M;15 return RND_CONVERSION * (*irnd);16

Page 715: Métodos Numéricos en Física

Comparacion Park & Miller con rand().main_rn_pm.c

1 #include <stdio.h>2 #include <stdlib.h>3

4 #define NBIN 505 #define N 40000000L6 #define P (2.0/N)7

8 double rand_parkmiller(long long int*);9 int searchidx(double, double*, int);

10

11 int main(void)12 13 long long int irnd;14 long int n;15 int xpos, ypos;16 double x, y;17 double bin[NBIN][NBIN];18 double binscale[NBIN+1];19

20 for (xpos = 0; xpos <= NBIN; xpos++)21 binscale[xpos] = xpos / ((double)NBIN);

Page 716: Métodos Numéricos en Física

Comparacion Park & Miller con rand().main_rn_pm.c

22 for (xpos = 0; xpos < NBIN; xpos++)23 for (ypos = 0; ypos < NBIN; ypos++)24 bin[xpos][ypos] = 0.0;25

26 irnd = 1;27 for (n = 0; n < N; n++) 28 x = rand_parkmiller(&irnd);29 y = rand_parkmiller(&irnd);30 xpos = searchidx(x, binscale, NBIN+1);31 ypos = searchidx(y, binscale, NBIN+1);32 bin[xpos][ypos] += P;33 34

35 for (xpos = 0; xpos < NBIN; xpos++) 36 for (ypos = 0; ypos < NBIN; ypos++)37 printf("%f %f %f\n", binscale[xpos], binscale[ypos],38 bin[xpos][ypos]);39 printf("\n");40 41

42 printf("\n\n\n");

Page 717: Métodos Numéricos en Física

Comparacion Park & Miller con rand().main_rn_pm.c

44 for (xpos = 0; xpos < NBIN; xpos++)45 for (ypos = 0; ypos < NBIN; ypos++)46 bin[xpos][ypos] = 0.0;47

48 srand(1);49 for (n = 0; n < N; n++) 50 x = rand() / ((double)RAND_MAX);51 y = rand() / ((double)RAND_MAX);52 xpos = searchidx(x, binscale, NBIN+1);53 ypos = searchidx(y, binscale, NBIN+1);54 bin[xpos][ypos] += P;55 56

57 for (xpos = 0; xpos < NBIN; xpos++) 58 for (ypos = 0; ypos < NBIN; ypos++)59 printf("%f %f %f\n", binscale[xpos], binscale[ypos],60 bin[xpos][ypos]);61 printf("\n");62 63

64 return 0;65

Page 718: Métodos Numéricos en Física

Correlaciones en una secuencia.Park & Miller versus rand(): 40,000,000 numeros pseudo-aleatorios en 50× 50 bins.

0.000775 0.00078 0.000785 0.00079 0.000795 0.0008 0.000805 0.00081 0.000815 0.00082 0.000825

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Page 719: Métodos Numéricos en Física

Correlaciones en una secuencia.Park & Miller versus rand(): 40,000,000 numeros pseudo-aleatorios en 50× 50 bins.

0.00078 0.000785 0.00079 0.000795 0.0008 0.000805 0.00081 0.000815 0.00082 0.000825

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Page 720: Métodos Numéricos en Física

Version con “Shuffle”.rn_shuffle.c

1 /*! \file rn_shuffle.c */2

3 #define RND_M 2147483647LL4 #define RND_A 16807LL5 #define RND_CONVERSION (1.0/RND_M)6 #define RND_NTAB 327 #define RND_NDIV (1+(RND_M-1)/RND_NTAB)8

9 /*! Calculates a shuffled version of10 Park-Miller random numbers. */11 double rand_shuffle(long long int* irnd)12 13 static long long int iy;14 static long long int iv[RND_NTAB];15 static int init = 1;16 int j;

Page 721: Métodos Numéricos en Física

Version con “Shuffle”.rn_shuffle.c

18 if (init) 19 for (j = RND_NTAB+7; j >= 0; j--) 20 (*irnd) = (RND_A * (*irnd)) % RND_M;21 if (j < RND_NTAB)22 iv[j] = (*irnd);23 24 iy = iv[0];25 init = 0;26 27

28 (*irnd) = (RND_A * (*irnd)) % RND_M;29 j = iy / RND_NDIV;30 iy = iv[j];31 iv[j] = (*irnd);32

33 return RND_CONVERSION * iy;34

Page 722: Métodos Numéricos en Física

Resultados.main_rn_shuffle.c

1.8e−05 1.9e−05 2e−05 2.1e−05 2.2e−05 2.3e−05 2.4e−05 2.5e−05 2.6e−05 2.7e−05

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Page 723: Métodos Numéricos en Física

Resultados.main_rn_shuffle.c

1.8e−05 1.9e−05 2e−05 2.1e−05 2.2e−05 2.3e−05 2.4e−05 2.5e−05 2.6e−05 2.7e−05

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

Page 724: Métodos Numéricos en Física

Parte XTrayectorias cuánticas

Page 725: Métodos Numéricos en Física

Operador de densidad.

En la mecánica cuántica tenemos la ecuación de Schrödinger:

i~∂

∂t|Ψ(t)〉 = H|Ψ(t)〉

donde en una representación de la posición (auto-estadosx |x〉 = x |x〉) tenemos la función de onda:

Ψ(x , t) = 〈x |Ψ(t)〉

Como esta función NO es una densidad de probabilidad sino esuna “amplitud de probabilidad”, podemos construir algo máscercano a una probabilidad — el operador de densidad:

%(t) = |Ψ(t)〉〈Ψ(t)|

La densidad de probabilidad para observar el sistema en laposición x es ahora simplemente:

p(x , t) = 〈x |%(t)|x〉 = |〈x |Ψ(t)〉|2 = |Ψ(x , t)|2

Page 726: Métodos Numéricos en Física

Operador de densidad.

En la mecánica cuántica tenemos la ecuación de Schrödinger:

i~∂

∂t|Ψ(t)〉 = H|Ψ(t)〉

donde en una representación de la posición (auto-estadosx |x〉 = x |x〉) tenemos la función de onda:

Ψ(x , t) = 〈x |Ψ(t)〉

Como esta función NO es una densidad de probabilidad sino esuna “amplitud de probabilidad”, podemos construir algo máscercano a una probabilidad — el operador de densidad:

%(t) = |Ψ(t)〉〈Ψ(t)|

La densidad de probabilidad para observar el sistema en laposición x es ahora simplemente:

p(x , t) = 〈x |%(t)|x〉 = |〈x |Ψ(t)〉|2 = |Ψ(x , t)|2

Page 727: Métodos Numéricos en Física

Operador de densidad.

En la mecánica cuántica tenemos la ecuación de Schrödinger:

i~∂

∂t|Ψ(t)〉 = H|Ψ(t)〉

donde en una representación de la posición (auto-estadosx |x〉 = x |x〉) tenemos la función de onda:

Ψ(x , t) = 〈x |Ψ(t)〉

Como esta función NO es una densidad de probabilidad sino esuna “amplitud de probabilidad”, podemos construir algo máscercano a una probabilidad — el operador de densidad:

%(t) = |Ψ(t)〉〈Ψ(t)|

La densidad de probabilidad para observar el sistema en laposición x es ahora simplemente:

p(x , t) = 〈x |%(t)|x〉 = |〈x |Ψ(t)〉|2 = |Ψ(x , t)|2

Page 728: Métodos Numéricos en Física

Ecuación de Liouville.

La ecuación de movimiento sale de la ecuación de Schrödingercomo

i~∂

∂t%(t) =

(H%(t)− %(t)H

)= [H, %(t)]

Es la ecuación de Liouville conocido de la estadística clásica.En la estadística clásica el teorema de Liouville dice que elvolumen ocupado en el espacio de fase es incompressible.Para la densidad de probabilidad en el espacio de fase saleentonces:

ddtρ(qi ,pi, t) = 0,

En el caso de la estadística cuántica entonces:

ddt→ ∂

∂t+

1i~

[H, ]

por lo tanto siempre es la derivada parcial que sale en laecuación.

Page 729: Métodos Numéricos en Física

Ecuación de Liouville.

La ecuación de movimiento sale de la ecuación de Schrödingercomo

i~∂

∂t%(t) =

(H%(t)− %(t)H

)= [H, %(t)]

Es la ecuación de Liouville conocido de la estadística clásica.En la estadística clásica el teorema de Liouville dice que elvolumen ocupado en el espacio de fase es incompressible.Para la densidad de probabilidad en el espacio de fase saleentonces:

ddtρ(qi ,pi, t) = 0,

En el caso de la estadística cuántica entonces:

ddt→ ∂

∂t+

1i~

[H, ]

por lo tanto siempre es la derivada parcial que sale en laecuación.

Page 730: Métodos Numéricos en Física

Ecuación de Liouville.

La ecuación de movimiento sale de la ecuación de Schrödingercomo

i~∂

∂t%(t) =

(H%(t)− %(t)H

)= [H, %(t)]

Es la ecuación de Liouville conocido de la estadística clásica.En la estadística clásica el teorema de Liouville dice que elvolumen ocupado en el espacio de fase es incompressible.Para la densidad de probabilidad en el espacio de fase saleentonces:

ddtρ(qi ,pi, t) = 0,

En el caso de la estadística cuántica entonces:

ddt→ ∂

∂t+

1i~

[H, ]

por lo tanto siempre es la derivada parcial que sale en laecuación.

Page 731: Métodos Numéricos en Física

Ecuación maestra.

Vamos a separar el sistem total en un sistema de interés (átomo)y en su ambiente (radiación em).Después vamos a integrar (traza) sobre los variables delambiente, que actua como un reservorio (termico).Asi queda una ecuación efectiva y aproximativa (aproximaciónBorn-Markov) para la dinamica del sistema de interés:

∂t% =

1i~

[H, %] +∑λ

Sλ%S†λ −

12

S†λSλ%−12%S†λSλ

eso es la ecuación maestra en forma de Lindblad.

Page 732: Métodos Numéricos en Física

Ecuación maestra.

Vamos a separar el sistem total en un sistema de interés (átomo)y en su ambiente (radiación em).Después vamos a integrar (traza) sobre los variables delambiente, que actua como un reservorio (termico).Asi queda una ecuación efectiva y aproximativa (aproximaciónBorn-Markov) para la dinamica del sistema de interés:

∂t% =

1i~

[H, %] +∑λ

Sλ%S†λ −

12

S†λSλ%−12%S†λSλ

eso es la ecuación maestra en forma de Lindblad.

Page 733: Métodos Numéricos en Física

Ecuación maestra.

Vamos a separar el sistem total en un sistema de interés (átomo)y en su ambiente (radiación em).Después vamos a integrar (traza) sobre los variables delambiente, que actua como un reservorio (termico).Asi queda una ecuación efectiva y aproximativa (aproximaciónBorn-Markov) para la dinamica del sistema de interés:

∂t% =

1i~

[H, %] +∑λ

Sλ%S†λ −

12

S†λSλ%−12%S†λSλ

eso es la ecuación maestra en forma de Lindblad.

Page 734: Métodos Numéricos en Física

Ejemplo: Oscilador armónico con fricción.

La fricción es la interacción con muchos átomos de un materialen contacto con el pendulo del oscilador.El reservorio son estos átomos.La ecuación maestra sale después la aproximación Born-Markovcomo:

∂t% =

1i~

[~ω(

a†a +12

), %] + γ

a%a† − 1

2a†a%− 1

2%a†a

donde a anihila una cuánta de energía del oscilador y γ es laconstante de fricción(actualmente es una función de correlación del reservorio).

Page 735: Métodos Numéricos en Física

Ejemplo: Oscilador armónico con fricción.

La fricción es la interacción con muchos átomos de un materialen contacto con el pendulo del oscilador.El reservorio son estos átomos.La ecuación maestra sale después la aproximación Born-Markovcomo:

∂t% =

1i~

[~ω(

a†a +12

), %] + γ

a%a† − 1

2a†a%− 1

2%a†a

donde a anihila una cuánta de energía del oscilador y γ es laconstante de fricción(actualmente es una función de correlación del reservorio).

Page 736: Métodos Numéricos en Física

Ejemplo: Oscilador armónico con fricción.

La fricción es la interacción con muchos átomos de un materialen contacto con el pendulo del oscilador.El reservorio son estos átomos.La ecuación maestra sale después la aproximación Born-Markovcomo:

∂t% =

1i~

[~ω(

a†a +12

), %] + γ

a%a† − 1

2a†a%− 1

2%a†a

donde a anihila una cuánta de energía del oscilador y γ es laconstante de fricción(actualmente es una función de correlación del reservorio).

Page 737: Métodos Numéricos en Física

Solución formal de la ecuación maestra.Tenemos la ecuación maestra como:

∂t% =

1i~

[H, %] + S%S† − 12

S†S%− 12%S†S

=1i~

(

H − i~2

S†S)

︸ ︷︷ ︸Hef

%− %

(H − i~

2S†S

)†︸ ︷︷ ︸

H†ef

+ S%S†

donde ahora H†ef 6= Hef.

Se puede escribir formalmente con (super-) operadores:

∂t% =

(L0 + L1

)%

donde:

L0 . . . =1i~

(Hef . . .− . . . H†

ef

), L1 . . . = S . . . S†

La solución formal es entonces:

%(t) = e(L0+L1)(t−t0)%(t0)

Page 738: Métodos Numéricos en Física

Solución formal de la ecuación maestra.Tenemos la ecuación maestra como:

∂t% =

1i~

[H, %] + S%S† − 12

S†S%− 12%S†S

=1i~

(

H − i~2

S†S)

︸ ︷︷ ︸Hef

%− %

(H − i~

2S†S

)†︸ ︷︷ ︸

H†ef

+ S%S†

donde ahora H†ef 6= Hef.

Se puede escribir formalmente con (super-) operadores:

∂t% =

(L0 + L1

)%

donde:

L0 . . . =1i~

(Hef . . .− . . . H†

ef

), L1 . . . = S . . . S†

La solución formal es entonces:

%(t) = e(L0+L1)(t−t0)%(t0)

Page 739: Métodos Numéricos en Física

Solución formal de la ecuación maestra.Tenemos la ecuación maestra como:

∂t% =

1i~

[H, %] + S%S† − 12

S†S%− 12%S†S

=1i~

(

H − i~2

S†S)

︸ ︷︷ ︸Hef

%− %

(H − i~

2S†S

)†︸ ︷︷ ︸

H†ef

+ S%S†

donde ahora H†ef 6= Hef.

Se puede escribir formalmente con (super-) operadores:

∂t% =

(L0 + L1

)%

donde:

L0 . . . =1i~

(Hef . . .− . . . H†

ef

), L1 . . . = S . . . S†

La solución formal es entonces:

%(t) = e(L0+L1)(t−t0)%(t0)

Page 740: Métodos Numéricos en Física

Trayectorias cuánticas.

Esta solución se puede escribir en una expansión:

%(t) =∞∑

n=0

∫ t

t0dtn . . .

∫ t2

t0dt1eL0(t−tn)L1eL0(tn−tn−1)L1 . . . L1eL0(t1−t0)%(t0)

Como:

eL0(t−t′) . . . = e−iHef(t−t′)/~︸ ︷︷ ︸Uef(t,t′)

. . .eiH†ef(t−t′)/~︸ ︷︷ ︸

U†ef(t,t

′)

, L1 = S . . . S†

usando un estado inicial %(t0) = |Ψ(t0)〉〈Ψ(t0)|, la solución sepuede escribir también como:

%(t) =∞∑

n=0

∫ t

t0dtn . . .

∫ t2

t0dt1|Ψ(t ; tn, . . . , t1)〉〈Ψ(t ; tn, . . . , t1)|

donde una trayectoria cuántica es dada por:

|Ψ(t ; tn, . . . , t1)〉 = Uef(t , tn)SUef(tn, tn−1)S . . . SUef(t1, t0)|Ψ(t0)〉

Page 741: Métodos Numéricos en Física

Trayectorias cuánticas.

Esta solución se puede escribir en una expansión:

%(t) =∞∑

n=0

∫ t

t0dtn . . .

∫ t2

t0dt1eL0(t−tn)L1eL0(tn−tn−1)L1 . . . L1eL0(t1−t0)%(t0)

Como:

eL0(t−t′) . . . = e−iHef(t−t′)/~︸ ︷︷ ︸Uef(t,t′)

. . .eiH†ef(t−t′)/~︸ ︷︷ ︸

U†ef(t,t

′)

, L1 = S . . . S†

usando un estado inicial %(t0) = |Ψ(t0)〉〈Ψ(t0)|, la solución sepuede escribir también como:

%(t) =∞∑

n=0

∫ t

t0dtn . . .

∫ t2

t0dt1|Ψ(t ; tn, . . . , t1)〉〈Ψ(t ; tn, . . . , t1)|

donde una trayectoria cuántica es dada por:

|Ψ(t ; tn, . . . , t1)〉 = Uef(t , tn)SUef(tn, tn−1)S . . . SUef(t1, t0)|Ψ(t0)〉

Page 742: Métodos Numéricos en Física

Una trayectoria cuántica.

Trayectora cuantica:

|Ψ(t ; tn, . . . , t1)〉 = Uef(t , tn)SUef(tn, tn−1)S . . . SUef(t1, t0)|Ψ(t0)〉

donde tiempos tn ≥ tn−1 ≥ . . . ≥ t1 son aleatorios y

Uef(tk , tk−1) = exp

−i~

∫ tk

tk−1

dτ[H(τ)− i~

2S†S

]︸ ︷︷ ︸

=Hef(τ)

promedio estatistico:

%(t) =∞∑

n=0

∫ t

t0dtn . . .

∫ t2

t0dt1|Ψ(t ; tn, . . . , t1)〉〈Ψ(t ; tn, . . . , t1)|

Page 743: Métodos Numéricos en Física

Probabilidades.

Traza es siempro uno:

Tr[%(t)] =∞∑

n=0

∫ t

t0dtn . . .

∫ t2

t0dt1

×Tr [|Ψ(t ; tn, . . . , t1)〉〈Ψ(t ; tn, . . . , t1)|]

=∞∑

n=0

∫ t

t0dtn . . .

∫ t2

t0dt1

×〈Ψ(t ; tn, . . . , t1)|Ψ(t ; tn, . . . , t1)〉= 1

Densidad de probabilidad para n eventos en tiempos tn, . . . , t1:

p(t ; tn, . . . , t1) = 〈Ψ(t ; tn, . . . , t1)|Ψ(t ; tn, . . . , t1)〉

Page 744: Métodos Numéricos en Física

Probabilidades.

Traza es siempro uno:

Tr[%(t)] =∞∑

n=0

∫ t

t0dtn . . .

∫ t2

t0dt1

×Tr [|Ψ(t ; tn, . . . , t1)〉〈Ψ(t ; tn, . . . , t1)|]

=∞∑

n=0

∫ t

t0dtn . . .

∫ t2

t0dt1

×〈Ψ(t ; tn, . . . , t1)|Ψ(t ; tn, . . . , t1)〉= 1

Densidad de probabilidad para n eventos en tiempos tn, . . . , t1:

p(t ; tn, . . . , t1) = 〈Ψ(t ; tn, . . . , t1)|Ψ(t ; tn, . . . , t1)〉

Page 745: Métodos Numéricos en Física

Probabilidad para un evento.

Trayectoria con un evento:

|Ψ(t ; t1)〉 = Uef(t , t1)SUef(t1, t0)|Ψ(t0)〉

Justo despues del evento:

|Ψ(t1; t1)〉 = SUef(t1, t0)|Ψ(t0)〉

Probabilidad para este evento:

P(t1; t1) = dt1〈Ψ(t1; t1)|Ψ(t1; t1)〉= dt1〈Ψ(t0)|U†

ef(t1, t0)S†S Uef(t1, t0)|Ψ(t0)〉︸ ︷︷ ︸

=|Ψ(t1)〉

= dt1〈Ψ(t1)|S†S|Ψ(t1)〉

Page 746: Métodos Numéricos en Física

Probabilidad para un evento.

Trayectoria con un evento:

|Ψ(t ; t1)〉 = Uef(t , t1)SUef(t1, t0)|Ψ(t0)〉

Justo despues del evento:

|Ψ(t1; t1)〉 = SUef(t1, t0)|Ψ(t0)〉

Probabilidad para este evento:

P(t1; t1) = dt1〈Ψ(t1; t1)|Ψ(t1; t1)〉= dt1〈Ψ(t0)|U†

ef(t1, t0)S†S Uef(t1, t0)|Ψ(t0)〉︸ ︷︷ ︸

=|Ψ(t1)〉

= dt1〈Ψ(t1)|S†S|Ψ(t1)〉

Page 747: Métodos Numéricos en Física

Probabilidad para un evento.

Trayectoria con un evento:

|Ψ(t ; t1)〉 = Uef(t , t1)SUef(t1, t0)|Ψ(t0)〉

Justo despues del evento:

|Ψ(t1; t1)〉 = SUef(t1, t0)|Ψ(t0)〉

Probabilidad para este evento:

P(t1; t1) = dt1〈Ψ(t1; t1)|Ψ(t1; t1)〉= dt1〈Ψ(t0)|U†

ef(t1, t0)S†S Uef(t1, t0)|Ψ(t0)〉︸ ︷︷ ︸

=|Ψ(t1)〉

= dt1〈Ψ(t1)|S†S|Ψ(t1)〉

Page 748: Métodos Numéricos en Física

Probabilidad para no evento.

Vamos a definir:P0(t1) = 〈Ψ(t1)|Ψ(t1)〉

Poco calculus:

P0(t1) =d

dt1〈Ψ(t0)|U†

ef(t1, t0)Uef(t1, t0)|Ψ(t0)〉

= 〈Ψ(t0)|U†ef(t1, t0)

i~

[H†

ef(t1)− Hef(t1)]

︸ ︷︷ ︸=−S†S

Uef(t1, t0)|Ψ(t0)〉

= −〈Ψ(t1)|S†S|Ψ(t1)〉

Page 749: Métodos Numéricos en Física

Probabilidad para no evento.

Vamos a definir:P0(t1) = 〈Ψ(t1)|Ψ(t1)〉

Poco calculus:

P0(t1) =d

dt1〈Ψ(t0)|U†

ef(t1, t0)Uef(t1, t0)|Ψ(t0)〉

= 〈Ψ(t0)|U†ef(t1, t0)

i~

[H†

ef(t1)− Hef(t1)]

︸ ︷︷ ︸=−S†S

Uef(t1, t0)|Ψ(t0)〉

= −〈Ψ(t1)|S†S|Ψ(t1)〉

Page 750: Métodos Numéricos en Física

Conexion.

Conclusion:

P(t1; t1) = p(t1; t1)dt1 = −dP0(t1)dt1

dt1

Entonces:

P0(t1) = 1−∫ t1

t0dτp(τ ; τ)︸ ︷︷ ︸

=Prob. p. evento en [t0, t1]

= Prob. p. no evento en [t0, t1]

Page 751: Métodos Numéricos en Física

Conexion.

Conclusion:

P(t1; t1) = p(t1; t1)dt1 = −dP0(t1)dt1

dt1

Entonces:

P0(t1) = 1−∫ t1

t0dτp(τ ; τ)︸ ︷︷ ︸

=Prob. p. evento en [t0, t1]

= Prob. p. no evento en [t0, t1]

Page 752: Métodos Numéricos en Física

Algoritmo.

|Ψ(tk+1)〉 = Uef(tk+1, tk)|Ψ(tk)〉P0(tk+1) = 〈Ψ(tk+1)|Ψ(tk+1)〉Calcular numero aleatorio R

|Ψ(t0)〉tk = t0

1− P0(tk+1) > R ?

Evento al tiempo tk+1:

tk = tk+1

NO SI

|Ψ(tk+1)〉 = S|Ψ(tk+1)〉/| . . . |

Page 753: Métodos Numéricos en Física

Implementacion.qt_qtsolve.c

1 /*! \file qt_solve.c */2

3 #include <stdlib.h>4 #include <assert.h>5 #include <math.h>6 #include <float.h>7 #include <complex.h>8

9 #define SAFETY_FACTOR 0.910

11 int de_solve_cpx(complex double*, size_t, double, double,12 double, double, void (*)(complex double*, complex double*,13 double));14 double rand_shuffle(long long int*);

Page 754: Métodos Numéricos en Física

Implementacion.qt_qtsolve.c

16 double qt_jumpprob(complex double* y, size_t sz)17 18 double res, tmp;19 size_t n;20

21 res = 0.0;22 for (n = 0; n < sz; n++) 23 tmp = cabs(y[n]);24 res += tmp * tmp;25 26 return 1.0 - res;27

Page 755: Métodos Numéricos en Física

Implementacion.qt_qtsolve.c

29 /*! Calculation of a quantum trajectory. Integrate starting30 values y[0..sz-1] from t1 to t2 with (relative) accuracy31 eps. y[..] is replaced by values at the end of the32 integration interval. derivs is the user-supplied33 routine for calculating the right-hand side derivative.34 jump calculates the jump and returns the norm of the35 resulting state, irnd is the initial seed for random-36 number generation. */37 int qt_solve(complex double *y, size_t sz, double t1, double t2,38 double eps,39 void (*derivs)(complex double*, complex double*, double),40 double (*jump)(complex double*, double), long long int* irnd)41 42 size_t i;43 double t, dt, dtmin, diff_prob, norm;44 complex double *ytmp;45 int min_cnt, ok;46 static double rnd;47 static int init = 1;

Page 756: Métodos Numéricos en Física

Implementacion.qt_qtsolve.c

49 if (init) 50 rnd = rand_shuffle(irnd);51 init = 0;52 53

54 dt = t2 - t1;55 assert((dtmin >= 0.0) && (dt >= dtmin));56 ytmp = malloc(sz * sizeof(complex double));57 t = t1;58 min_cnt = 0;59 ok = 0;

Page 757: Métodos Numéricos en Física

Implementacion.qt_qtsolve.c

61 do 62 dt = ((t+dt) > t2) ? t2-t : dt;63 dtmin = 0.001 * dt;64 for (i = 0; i < sz; i++)65 ytmp[i] = y[i];66 min_cnt += de_solve_cpx(ytmp, sz, t, t+dt, eps, dtmin, derivs);67 diff_prob = qt_jumpprob(ytmp, sz) - rnd;68 if (diff_prob > 0.0) /* go back */69 dt *= 0.5;70 else /* go forward, check jump */71 for (i = 0; i < sz; i++)72 y[i] = ytmp[i];73 t += dt;74 if (fabs(diff_prob) < eps) /* jump time */75 rnd = rand_shuffle(irnd);76 norm = jump(y, t);77 if (norm > DBL_MIN) 78 norm = 1.0 / sqrt(norm);79 for (i = 0; i < sz; i++)80 y[i] *= norm;81

Page 758: Métodos Numéricos en Física

Implementacion.qt_qtsolve.c

82 else 83 free(ytmp);84 return min_cnt;85 86 87 88 while ((t2-t) > DBL_MIN);89

90 free(ytmp);91 return min_cnt;92

Page 759: Métodos Numéricos en Física

Resultados.main_qt_oscidamped.c

1 #include <stdlib.h>2 #include <stdio.h>3 #include <math.h>4 #include <float.h>5 #include <complex.h>6

7 #define TRAJ_MAX 10008 #define POINTS 10009 #define SZ 11

10 #define GAMMA 0.0511

12 int qt_solve(complex double*, size_t, double, double, double,13 void (*)(complex double*, complex double*, double),14 double (*)(complex double*, double), long long int*);

Page 760: Métodos Numéricos en Física

Resultados.main_qt_oscidamped.c

16 void calc_ini(complex double* psi)17 18 size_t n;19

20 for (n = 0; n < SZ; n++)21 psi[n] = 0.0;22 psi[SZ-1] = 1.0;23 24

25 /* Harmonic oscilator with damping: */26 void derivs(complex double *dpsidt, complex double *psi,27 double t)28 29 size_t k;30

31 for (k = 0; k < SZ; k++)32 dpsidt[k] = - (I + 0.5 * GAMMA) * k * psi[k];33

Page 761: Métodos Numéricos en Física

Resultados.main_qt_oscidamped.c

35 double jump(complex double* psi, double t)36 37 size_t k;38 double norm, tmp;39

40 norm = 0;41 for (k = 0; k < SZ-1; k++) 42 psi[k] = psi[k+1] * sqrt(GAMMA * (k+1.0));43 tmp = cabs(psi[k]);44 norm += tmp * tmp;45 46 psi[SZ-1] = 0.0;47 return norm;48

Page 762: Métodos Numéricos en Física

Resultados.main_qt_oscidamped.c

50 int main(void)51 52 complex double psi[SZ];53 double t, tmax, tstep, tmp, norm, quanta;54 int traj, i;55 long long int irnd;56 size_t k;57 double data[POINTS];58

59 tmax = 100.0;60 tstep = tmax / POINTS;61

62 for (i = 0; i < POINTS; i++)63 data[i] = 0.0;

Page 763: Métodos Numéricos en Física

Resultados.main_qt_oscidamped.c

65 for (traj = 1; traj <= TRAJ_MAX; traj++) 66 calc_ini(psi);67 irnd = traj;68 t = 0.0;69 for (i = 0; i < POINTS; i++) 70 qt_solve(psi, SZ, t, t+tstep, 1.0e-7, derivs,71 jump, &irnd);72 t += tstep;73 quanta = 0.0;74 norm = 0.0;75 for (k = 0; k < SZ; k++) 76 tmp = cabs(psi[k]);77 norm += tmp * tmp;78 quanta += k * tmp * tmp;79 80 if (norm > DBL_MIN) 81 data[i] += quanta / norm;82 83 printf("%f %g\n", t, data[i] / traj);84 85 printf("\n\n");86 87 return 0;88

Page 764: Métodos Numéricos en Física

Promedio de trayectorias.

0

2

4

6

8

10

0 10 20 30 40 50 60 70 80 90 100

N = 1

Page 765: Métodos Numéricos en Física

Promedio de trayectorias.

0

2

4

6

8

10

0 10 20 30 40 50 60 70 80 90 100

N = 5

Page 766: Métodos Numéricos en Física

Promedio de trayectorias.

0

1

2

3

4

5

6

7

8

9

10

0 10 20 30 40 50 60 70 80 90 100

N = 50

Page 767: Métodos Numéricos en Física

Promedio de trayectorias.

0

1

2

3

4

5

6

7

8

9

10

0 10 20 30 40 50 60 70 80 90 100

N = 100