Diferenciacion Numerica - Facultad de Ciencias Fisicas
Transcripción
Diferenciacion Numerica - Facultad de Ciencias Fisicas
Diferenciacion Numerica Justo Rojas Laboratorio de Simulación Computacional de Materiales Facultad de Ciencias Fı́sicas Universidad Nacional Mayor de San Marcos Abril 17, 2012 Curso de Análisis Numérico, Semestre 2012-I Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 1 / 14 Introducción En fı́sica con frecuencia es necesario estimar las derivadas de R diferentes ordenes o integrales f (x)dx de la función f (x) o de una tabla de datos. Cuando no posible realizarlo analı́ticamente se recurre a los métodos numéricos. La diferenciación numérica consiste en encontrar el valor numérico de la derivada de la función f (x) en un punto dado Algunos esquemas simples de derivación numérica se puede obtener a partir del desarrollo de una función en serie de Taylor, f (x + h) = f (x) + hf 0 (x) + Justo Rojas (LSCM) AN2012-P4 h2 00 h3 f (x) + f 000 (x) + 2! 3! Abril 17, 2012 (1) 2 / 14 Esquemas de diferenciación numérica simples Primera aproximación de la primera derivada D de la función f (x), usando 2 puntos, f 0 (x) = ∆fk f (x + h) − f (x) + O[h] ≡ + 0[h] h h (2) Utilizando el esquema centrado mediante 2 puntos separados f (x + h) − f (x − h) + 0[h2 ] 2h Primera aproximación de la segunda derivada f 0 (x) = f 00 (x) = Justo Rojas (LSCM) (3) f (x + h) + f (x − h) − 2f (x) + 0[h4 ] h2 AN2012-P4 Abril 17, 2012 3 / 14 Aproximación con esquemas simples Una forma de evaluar numéricamente la derivada de una función, por ejemplo mediante la formula(2) consiste en evaluar el cociente con valores de h cada vez menores hasta que la sucesión deje de variar significativamente. En la tabla siguiente se muestra los valores estimados de la primera derivada de la función f (x) = arctan(x) en el punto x=1.3456783 y el error calculado como la diferencia entre el valor estimado y el valor 1 exacto (f 0 (x) = 1+x 2 ) para diferentes valores de h. Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 4 / 14 Tabla: h valor_est error -----------------------------------0.10E+01 0.236098 -0.12E+00 0.10E+00 0.339380 -0.16E-01 0.10E-01 0.354065 -0.17E-02 0.10E-02 0.355616 -0.15E-03 0.10E-03 0.355990 0.23E-03 0.10E-04 0.359128 0.34E-02 0.10E-05 0.313022 -0.43E-01 0.10E-06 0.149983 -0.21E+00 0.10E-07 1.499833 0.11E+01 Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 5 / 14 Aproximación con esquemas simples Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 6 / 14 Estimacion de la derivada de sin(x) en x=0.5 Usando esquemas (2) y ye2 con (??) h ye1 err1 ye2 err2 ------------------------------------------------------------.100E+01 .5180694570 -.3595131049 .7384602671 -.1391222948 .100E+00 .8521695035 -.0254130584 .8761207332 -.0014618287 .100E-01 .8751701291 -.0024124328 .8775675862 -.0000149757 .100E-02 .8773316694 -.0002508925 .8775768989 -.0000056630 .100E-03 .8774894005 -.0000931614 .8775479661 -.0000345958 .100E-04 .8772785720 -.0003039899 .8774317655 -.0001507964 .100E-05 .8751702874 -.0024122745 .8763765445 -.0012060174 .100E-06 1.0030990528 .1255164909 .9403408193 .0627582574 Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 7 / 14 Influencia de errores Notar que inicialmente el error disminuye pero luego empieza a crecer descontroladamente Este comportamiento se observa en ambos esquemas Se observa que con el esquema centrado se obtiene mejor resultado con menos iteraciones Cual es el problema? Se puede comprender invocando el error de truncamiento y en parte error de redondeo Mientras que el disminuye se reduce en factor de 100 con la disminución de h en 10 veces Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 8 / 14 Otros casos Sin hacer iteraciones como averiguar el valor de h óptimo? Una de las formas: si se quiere una precision con 6 decimales 00 1 −6 | f (ξ)h 2 | ≤ 2hn ≤ 10 6 − n = log 2 de donde n = 5 Otro caso representativo se puede notar al estimar numéricamente la derivada de la función f (x) = sen(1,1π/x), por ejemplo en el punto x=0.1 y con h=0.01 f 0 (x = 0,1) = (sen Justo Rojas (LSCM) 1,1π 1,1π sen10π − sen11π − sen )/0,01 = =0 0,11 0,1 0,01 AN2012-P4 Abril 17, 2012 9 / 14 Caso general usando diferencias finitas El problema inverso a la aproximación de funciones mediante la serie de Taylor consiste en: dada la función f (x) para valores equiespaciados de la variable x, estimar las derivadas de la función. Para el caso general, sean los D= d d2 dn ; D2 = 2 ; Dn = n dx dx dx los operadores diferenciales finitos de ordenes 1,2 . . . n. Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 10 / 14 Caso general usando diferencias finitas Aplicando a la formula (1) el operador de DF de desplazamiento E y los operadores diferenciales finitos Efk = (1 + hD + h2 2 h3 3 D + D + ...)fk 2! 3! se tiene: E = e hD (4) La relación entre D y ∆ , obtenemos teniendo en cuenta que E = ∆ + 1 hD = ln(∆ + 1) = ∆ − de donde D= Justo Rojas (LSCM) ∆2 ∆3 ∆4 + − + ... 2 3 4 1 ∆2 ∆3 ∆4 [∆ − + − + ...] h 2 3 4 AN2012-P4 (5) Abril 17, 2012 11 / 14 Caso general usando diferencias finitas El operador diferencial hacia adelante de segundo orden D2 = 1 2 11 5 [∆ − ∆3 + ∆4 − ∆5 + ...] 2 h 12 6 (6) De una manera análoga se obtienen las relaciones entre D y ∆, D y δ 1 ∇2 ∇3 [∇ + + + ...] h 2 3 (7) 11 1 2 [∇ + ∇3 + ∇4 + ...] 2 h 12 (8) 1 δ3 δ5 [δ − + − ...] h 24 640 (9) 1 1 1 [µδ − µδ 3 + µδ 5 − ...] h 6 30 (10) D= D2 = D= D= Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 12 / 14 Ilustracion de diferentes Esquemas Figura: Ilustración de diferenciación numérica. Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 13 / 14 Ilustración de diferentes esquemas Fórmulas para la estimación de la primera derivada de la función f (x) utilizando los esquemas de diferencias finitas hacia adelante FFD de (forward finite diference) Diferencias finitas hacia atras BFD Diferencias finitas centrada CDF , limitados a solo el primer termino Esquema de derivada hacia adelante dfk fk+1 − fk 1 = Dfk = + 0[h]; 0[h] = − hf 00 dx h 2 Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 (11) 14 / 14 Esquema de derivada hacia atras dfk fk − fk−1 = Dfk = + 0[h] dx h (12) Esquema de derivada centrada fk+1 − fk−1 dfk = Dfk = + 0[h2 ] dx 2h (13) Ejemplo2 Valores estimados de la primera derivada de la función √ f (x) = x evaluado en el punto x = 10,0 mediante las fórmulas (??, ?? , ??). El valor exacto de f 0 (x = 10) es 0.158113 Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 15 / 14 Cuadro: Errores de derivación numérica utilizando diferentes esquemas Esquema Adelante Atras Centrada Adelante Atras Centrada Justo Rojas (LSCM) h 1 1 1 0.1 0.1 0.1 Estimado 0.154347 0.162277 0.158312 0.157720 0.158511 0.158115 AN2012-P4 Error -0.003766 -0.00416 -0.00019 -0.000393 -0.000398 -0.000002 Abril 17, 2012 16 / 14 Figura: Ilustración de los diferentes Esquemas. Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 17 / 14 Listado del programa simple en F90 que calcula la tabla de diferencias finitas y las derivadas mediante esquemas numéricos. ! Estimacion de las derivadas a partir de una tabla PROGRAM difnum IMPLICIT NONE ! ============================================== ! seccion de declaraciones de variables REAL,DIMENSION(50,50)::F !matriz principal REAL(8)::pdf1,pdf2,pdf3,h !esquemas INTEGER ::m,i,j,k,nm ! m -numero de puntos; nm = m-1 maximo orden CHARACTER(20)::name CHARACTER(50)::titulo=’Diferenciacion numerica’ ! ================================================ Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 18 / 14 PRINT*,titulo h=2.0 PRINT*,’nombre de archivo con los datos?’ READ*,name OPEN(unit=8,file=name,action=’read’,status=’old’) print*,’numero de puntos a utilizar?’ read*,m ! Lectura de datos del archivo DO i=1,m READ(8,fmt=*)(F(i,j),j=1,2) ENDDO CLOSE(8) PRINT*,’=============================================’ PRINT*,’datos leidos ’ PRINT*,’ I X(I) f(I)’ DO i=1,m WRITE(*,20)i,F(i,1:2) ENDDO Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 19 / 14 ! CALCULO DE LAS DIFERENCIAS nm=m-1 DO k=3,m+1 j=nm+3-k DO i=1,j F(i,k)=F(i+1,k-1)-F(i,k-1) ENDDO ENDDO PRINT*,’TABLA DE DIFERENCIAS’ PRINT*,’ I X(I) f(I) D1 D2 D3 D4 D5 D print*,’-----------------------------------------------------DO i=1,m j=m+2-i WRITE(*,50) i,F(i,1:j) ENDDO print*,’-----------------------------------------------------20 FORMAT(1X,I4,2F9.5) 50 FORMAT (1X,I4,8F9.5) ! ========================================= Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 20 / 14 Salida TABLA DE DIFERENCIAS I X(I) f(I) D1 D2 D3 D4 ------------------------------------------------------------1 1.00000 1.00000 -0.50000 0.33333 -0.24999 0.19998 -0 2 3.00000 0.50000 -0.16667 0.08334 -0.05001 0.03335 -0 3 5.00000 0.33333 -0.08333 0.03333 -0.01666 0.00951 4 7.00000 0.25000 -0.05000 0.01667 -0.00715 5 9.00000 0.20000 -0.03333 0.00952 6 11.00000 0.16667 -0.02381 7 13.00000 0.14286 ------------------------------------------------------------Derivadas para I=2 f_21= -8.333499729633331E-002 f_22= -0.104169994592667 f_23= -0.112504991392295 Justo Rojas (LSCM) AN2012-P4 Abril 17, 2012 21 / 14