espe

´ ´ METODOS NUMERICOS ´ DERIVACION PROFESOR: ´ LUIS MARCILLO ING.JOSE NOMBRE: Joseline Naranjo NIVEL: Cuarto PERIODO: JU

Views 178 Downloads 10 File size 409KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

´ ´ METODOS NUMERICOS ´ DERIVACION PROFESOR: ´ LUIS MARCILLO ING.JOSE NOMBRE: Joseline Naranjo NIVEL: Cuarto PERIODO: JULIO 2013

M´etodos Num´ericos

Aplicar la f´ ormula de dos puntos adelantada al c´alculo de la derivada primera de f (x) = sin(x) en x = 2,13432. Comprobar que al ir reduciendo h el error se reduce de manera aproximadamente lineal con h. El siguiente script en MATLAB aplica la f´ormula de dos puntos adelantada al c´ alculo de la derivada primera de f (x) = sin(x) en x = 2,13432 como solicita el enunciado, adem´ as comprueba la reducci´on lineal del error. Para el desarrollo del script fue necesario: 1. Delimitar los valores que h tomar´ıa, y con que intervalos: As´ı h toma 50 valores entre 1x10−6 y 1x10−1 . 2. Conocer el valor real de la derivada: Se sabe que la derivada del seno es el coseno, por lo tanto: f 0 (x) = cos(x) Como se pide evaluar en x = 2,13432, se tiene: f 0 (2,13432) = cos(2,13432) = −0,5342 3. Graficar el error relativo en escala logar´ıtmica. clear all clc f=@(x)(sin(x)) x=2.13432 h=linspace(1E-6,1E-1,50); for i=1:50 vd(i) = ( f(x+h(i)) - f(x) ) / h(i); end vd

t=cos(2.13432); for i=1:50 er(i)= abs(100*(t-vd(i))/t); end loglog(h,er) As´ı, en la u ´ltima iteraci´ on se tiene que la derivada de la funci´on f (x) = sin(x) en x = 2,13432 es: f 0 (x) = −0,5342 Para comprobar que al ir reduciendo h el error se reduce de manera aproximadamente lineal con h se observa la siguiente gr´afica en escala logar´ıtmica que 1

contiene en el eje 0 x0 los valores que tom´o h y en el eje 0 y 0 los errores relativos correspondientes a cada h:

Se aprecia una correspondencia lineal, por lo que se comprueba lo planteado en el enunciado

2

Repetir el ejercicio anterior comparando la presici´on de la f´ormula de diferencia adelantada con la retrasada. Aplicar tambi´en ambas f´ormulas al c´alculo de la derivada de la funci´ on g(x) = 1/(1 + ex ) en x = 1/2. Para cumplir con el enunciado, con los mismos principios que en el literal anterior, se desarrolla el siguiente script: f=@(x)(sin(x)); x=2.13432; h=linspace(1E-6,1E-1,50); for i=1:50 vd(i) = ( 3*f(x) -4*f(x-h(i)) + f(x-2*h(i)) ) / (2*h(i)); end vd t=cos(2.13432); for i=1:50 er(i)= abs(100*(t-vd(i))/t); end hold on loglog(h,er,’r’) Se aumenta el comando hold on para mantener la gr´afica realizada en el ejercicio 2 para comparar los resultados. As´ı, se tiene que la derivada de la funci´ on f (x) = sin(x) en x = 2,13432 es: f 0 (x) = −0,5342 Y la comparaci´ on de precision de la f´ormula de diferencia adelantada con la retrasada puede apreciarse en el siguiente gr´afico en el que la gr´afica en color azul representa los errores relativos correspondientes a cada h para la f´ormula de diferencia adelantada y la de color rojo para la retrasada.

Es evidente que la f´ ormula de diferencia retrasada tiene una mejor presici´on 3

para calcular la derivada de la funci´on f (x) = sin(x) en x = 2,13432 ya que su gr´ afica esta en cada punto m´as cerca del 0 respecto a la gr´afica azul. De igual manera, con los mismos principios usados en los dos script anteriores, el presente script calcular´a la derivada de la funci´on g(x) = 1/(1 + ex ) en x = 1/2: %g(x) %RETRASADA f2=@(x)( 1 / (1+exp(x))); x2=0.5; h2=linspace(1E-6,1E-1,50); for i=1:50 vd2(i) = ( 3*f2(x2) -4*f2(x2-h2(i)) + f2(x2-2*h2(i)) ) / (2*h2(i)); end vd2 %ADELANTADA f3=@(x)( 1 / (1+exp(x))); x3=0.5; h3=linspace(1E-6,1E-1,50); for i=1:50 vd3(i) = ( f3(x3+h3(i)) - f3(x3) ) / h3(i); end vd3 En ambos casos se tiene que la derivada de la funci´on g(x) = 1/(1 + ex ) en x = 1/2 es: g 0 (x) = −0,5342

4

Supongamos que se conoce el valor de la derivada mediante la f´ormula de diferencia adelantada para tres valores de h diferentes. Es posible estimar el valor del h ´ optimo?. Es posible estimar el error que se comete en el c´alculo en cada uno de los casos?. Aplicarlo al c´alculo de la derivada de la funci´on f (x) = sin(x) en x = 0,6 usando h = 0,1, h = 0,01, y h = 0,0000000001. Como se sabe que:

f 00 (x)h f1 − f0 − h 2 Ser´ a posible determinar el h ´optimo. As´ı mismos se sabe que el error de truncamiento est´a dado por M h/2 en donde M es la frontera de f 00 (t) para un t cercano a x. Asumiendo que el error de redondeo sea 2/h. Siendo  un valor impuesto por la m´ aquina o proceso. Se tiene que el error total E, est´a dado por la suma de los errores de truncamiento y redondeo: M h 2 E= + 2 h Al derivar E respecto a h e igualando a cero se encontr´a los puntos cr´ıticos, es decir el valor ´ optimo de h, as´ı: f 0 (x) =

M 2 dE =0= − 2 dh 2 h entonces:

r  h=2 M

Para aplicar la f´ ormula del Error es necesario definir M y .  = 0,5x10−9 M = |f 00 (x)| ≤ |cos(x)| ≤ 1

por lo tanto M = 1

Aplicando a la funci´ on f (x) = sin(x) en x = 0,6 usando h = 0,1, h = 0,01, y h = 0,0000000001. mediante el siguiente script: f=@(x)(sin(x)); x=0.6; h(1)=0.1; h(2)=0.01; h(3)=0.0000000001; %c´ alculo de la derivada for i=1:3 d(i) = ( f(x+h(i)) - f(x) ) / h(i); %c´ alculo del eror E(i) = h(i)/2 + (2*.5E-9)/h(i); end 5

Se tiene los vectores (d) y (E), que contienen los valores de la primera derivada y del error respectivamente para cada h: d= E=

0,79575

0,05000001

0,82249

0,0050001

0,82533



10,00000000005



Para encontrar el h ´ optimo se reemplaza los valores de  y M en la f´ormula: r  h=2 M r 0,5x10−9 h=2 1 se tiene el valor ´ optimo para h: h = 4,4724x10−5

6

Consulta: Calcular cotas para el error de truncaci´on que se comete al aproximar las derivadas de las funciones f (x) = 1/(1 + sin(x)) y g(x) = ln(1 + 2x). Calcular las cotas teniendo en cuenta el error de redondeo y comprobar que los errores reales est´ an por debajo de lo permitido por la cota. Sea fk = yk + ek , donde ek es el error que se tiene al calcular f (xk ), incluyendo los errores de medida y el error de redondeo. Entonces podemos escirbir la f´ ormula para calcular la derivada de una funci´on como: f 0 (x) =

f (x + h) − f (x − h) + E(f, h) 2h

f1 − f−1 + E(f, h) 2h Donde el t´ermino del error E(f, h) tendr´a una parte debida al error de redondeo y otra debida al error de truncamiento: f 0 (x) =

E(f, h) =

h2 e1 − e−1 − f 000 (c) 2h 3!

Al suponer que cada error ek es de tamano , que los errores se acumulan independientemente de los signos y que |f 000 (x)| ≤ M , entonces obtenemos la siguiente cota del error: |E(f, h)| ≤

2 M h2 + 2h 3!

|E(f, h)| ≤

 M h2 + h 6

Cota del error para: f (x) = 1/(1 + sin(x)) Para emplear la f´ ormula de |E(f, h)| que calcula la cota, se define el valor de:  = 0,5x10−9 y suponiendo que la derivada se va a calcular en el punto x = 0,58 el valor de M est´ a dado por: 6cos3 (x) + 5cos(x)sin2 (x) + 4cos(x)sin(x) − cos(x) 000 ≤1=M |f (x)| ≤ − (sin(x) + 1)4 As´ı se tiene que la cota para la presente funci´on en funci´on de h es: |E(h)| ≤

(0,5x10−9 ) h2 + h 6

Para definir un valor de la cota, es necesario definir una h, as´ı h = 0,001, entonces: (0,5x10−9 ) (0,001)2 |E| ≤ + 0,001 6 7

|E| ≤ 5x10−7 + 1,6667x10−7 |E| ≤ 6,6667x10−7 Asi la cota para el error de la funci´on f (x) = 1/(1 + sin(x)) es: |E| ≤ 1,1667x10−6 Al calcular la derivada de la funci´on con las condiciones ya establecidas y calcular el error (fue necesario el c´alculo anal´ıtico de f 0 (x)) mediante el siguiente script: x=0.58; h=0.001; f=@(x)(1/(1+sin(x))); t= - ( cos(x) ) / ( (sin(x)+1)^2 ); %c´ alculo de la derivada d= ( f(x+h) - f(x-h) ) / ( %c´ alculo del error e= abs((t-d)/t)

2*h )

Se obtiene el siguiente resultado: f 0 (x) = −0,349053034555402 error real = 4,793181x10−7 Se compueba que el error real no est´a por debajo del permitido por la cota. Esto se debe a que la h usada no es la ´optima.

8

Cota del error para: g(x) = ln(1 + 2x) Para emplear la f´ ormula de |E(g, h)| que calcula la cota, se define el valor de:  = 0,5x10−9 y suponiendo que la derivada se va a calcular en el punto x = 0,76 el valor de M est´ a dado por: 16 |≤1=M |g 000 (x)| ≤ | (2x + 1)3 As´ı se tiene que la cota para la presente funci´on en funci´on de h es: |E(h)| ≤

2(0,5x10−9 ) h2 + h 6

Para definir un valor de la cota, es necesario definir una h, as´ı h = 0,001, entonces: (0,5x10−9 ) (0,001)2 |E| ≤ + 0,001 6 −7 |E| ≤ 5x10 + 1,6667x10−7 |E| ≤ 6,6667x10−7 Asi la cota para el error de la funci´on g(x) = ln(1 + 2x) es: es: |E| ≤ 1,1667x10−6 Al calcular la derivada de la funci´on con las condiciones ya establecidas y calcular el error (fue necesario el c´alculo anal´ıtico de g 0 (x)) mediante el siguiente script: x=0.76; h=0.001; f=@(x)(log(1+2*x)); t= 2/(2*x+1); %c´ alculo de la derivada d= ( f(x+h) - f(x-h) ) / ( %c´ alculo del error e= abs((t-d)/t)

2*h )

Se obtiene el siguiente resultado: f 0 (x) = 0,793650960286274 error real = 2,09960705x10−7 Se compueba que el error real no est´a por debajo del permitido por la cota. Esto se debe a que la h usada no es la ´optima.

9

Construir una tabla de derivadas primeras de la funci´on g(x) definida por la siguiente tabla en los puntos xi con la mayor precisi´on posible mediante f´ormulas de tres puntos. x g(x) 1.0 1.000000 1.2 0.997502 1.4 0.990025 1.8 0.960398 2.0 0.940678 Para lograr la mayor precisi´on posible, se aplicar´a la f´ormula encontrada en el ejercicio 4 para encontrar el valor ´optimo de h: r  h=2 M Para aplicar la f´ ormula es necesario definir M y .  = 0,5x10−9 As´ı, suponiendo que la segunda derivada de la funci´on g(x) ≈ 1: M = |f 00 (x)| ≈ 1

por lo tanto M = 1

Reemplazando los valores de  y M en la f´ormula: r  h=2 M r 0,5x10−9 h=2 1 se tiene el valor ´ optimo para h: h = 4,4724x10−5 Para calcular la derivada es necesario encontrar la funci´on g(x), se lo hace con la funci´ on interpol lagrange de esta manera: x=[1 1.2 1.4 1.8 2]; y=[1 0.997502 0.990025 0.960398 0.940678]; g=interpol_lagrange(x,y) As´ı, se obtiene la funci´ on g(x): g(x) = 0,0239x4 − 0,1279x3 + 0,1904x2 − 0,0943x + 1,0079 Ahora, para calcular la primera derivada de la funci´on g(x), se usar´a la f´ ormula de tres puntos adelantada para todos los xi a excepci´on del u ´ltimo en el que se usar´ a la f´ ormula de tres puntos retrasada. Dicho c´alculo se lo realiza con el siguiente script, incluyendo en el la funci´on g(x): 10

g=@(x)((5174635971848881*x^4)/216172782113783808 (3374731039133*x^3)/26388279066624 + (1028874356470605599*x^2)/5404319552844595200 (127423046416981343*x)/1351079888211148800 + 453909699963344279/450359962737049600); x=[1 1.2 1.4 1.8 2]; h=4.4724E-5; %c´ alculo de la derivada d(5)=( 3*g(x(5)) -4*g(x(5) -h) +g(x(5) -2*h) ) / ( 2*h ); for i=1:4 d(i) = ( -g(x(i) +2*h) +4*g(x(i)+h) -3*g(x(i))) / 12*h; end As´ı con una transposici´ on del vector (d) obtenido, se tiene la siguiente tabla: x 1.0 1.2 1.4 1.8 2.0

g(x) 1.000000 0.997502 0.990025 0.960398 0.940678

g 0 (x) -4.88224269487247 x10−13 -8.14029447381825 x10−12 -1.68314873715771 x10−11 -3.12025175996116 x10−11 -0.101442000252464

11

Hay otra alternativa para cumplir con el enunciado del problema, usar la funci´ on del ejercicio 1, de esta manera: >> x=[1 1.2 1.4 1.8 2]; >> gx=[1 0.997502 0.990025 0.960398 0.940678]; >> d=derivada_df (x,gx) As´ı, se obtiene el vector (d) que contiene las derivadas primeras de la funci´on (g(x)) en los puntos (x); al transponer dicho vector y ponerlo en la tabla: x 1.0 1.2 1.4 1.8 2.0

g(x) 1.000000 0.997502 0.990025 0.960398 0.940678

g 0 (x) -0.0250 -0.0748 -0.2963 -0.1972 -0.1477

Las diferencias entre la primera tabla y la segunda se dan por lo ya expuesto en el ejercicio 1, adem´ as se puede decir que la primera tabla es m´as precisa que la segunda.

12

Usando la f´ ormula de diferencia centrada calcular la derivada primera de la funci´ on f (x) = arctan(x) en el punto x = sqrt(2) ( el valor correcto es 1/3). Utilizar diferentes valores de h y estudiar los efectos de los errores de redondeo y de truncaci´ on. Para cumplir con el enunciado, con los mismos principios que en literales anteriores, se desarrolla el siguiente script: f=@(x)(atan(x)); x=sqrt(2); t=1/3; h=linspace(1E-6,1E-1,50); for i=1:50 %c´ alculo de la derivada d(i) = ( ( f(x+h(i)) -f(x-h(i)) ) / (2*h(i)) %c´ alculo del eror er(i)= abs(100*(t-d(i))/t); end loglog(h,er)

);

d er As´ı en la u ´ltima iteraci´ on del script para calcular la derivada de f (x) = arctan(x) en el punto x = sqrt(2) se tiene que: f 0 (x) = 0,3333 La siguiente gr´ afica que contiene los valores de h - error relativo en escala logar´ıtmica nos ayudar´ a en el an´alisis de los errores de redondeo y truncaci´on para el presente c´ alculo. As´ı, se observa que el error es bajo y aceptable (< 5 %) para todos los valores de h, a pesar de que se observa un cambio en la pendiente de la recta, se dice que esto se debe a que al disminuir h vamos restando valores de f(x) cada vez m´ as pr´ oximos y esto se traduce en un mayor error de redondeo; es as´ı que la mejor presici´ on no se consigue con el valor de h m´as pequeno posible, sino con un valor que sin producir un gran error de redondeo disminuya lo suficiente el error de truncaci´ on.

13

A continuaci´ on se analizar´a el porcentaje del error total que representa el error de truncaci´ on y de redondeo. De la f´ ormula para el error total E obtenida en el ejercicio 3: E=

M h 2 + 2 h

Se sabe que el primer t´ermino representa al error de truncamiento, y el segundo el error de redondeo, sabiendo que aproximadamente:  = 0,5x10−9 y M = |f 00 (x)| ≤ |

√ −2x −2 2 | ≤ | | (x2 + 1)2 9

por lo tanto M ≈ 0,314

se tiene que: 1x10−9 h Al separar esta f´ ormula y calcular y graficar que porcentaje del total representa cada t´ermino y sus valores, mediante el siguiente script: E = 0,157h +

f=@(x)(atan(x)); x=sqrt(2); t=1/3; h=linspace(1E-1,1E-6,50); for i=1:50 14

%c´ alculo de la derivada d(i) = ( ( f(x+h(i)) -f(x-h(i)) ) / (2*h(i)) ); %c´ alculo del error relativo erel(i)= abs(100*(t-d(i))/t); %c´ alculo del error de truncamiento etru(i)=0.157*h(i); %c´ alculo del error de redondeo ered(i)=(1E-9)/h(i); %c´ alculo del error total (truncamiento + redondeo) etot(i)=etru(i)+ered(i); %c´ alculo del porcentaje de error de truncamiento poetru(i)=(100*etru(i)) / etot(i); %c´ alculo del porcentaje de error de redondeo poered(i)=(100*ered(i)) / etot(i); end subplot(1,2,1);plot(h,poetru) hold on subplot(1,2,1);plot(h,poered,’r’) subplot(1,2,2);plot(h,etru) hold on subplot(1,2,2);plot(h,ered,’r’) Se tiene el siguiente gr´ afico: En donde la gr´ afica de la izquierda representa los valores de h en el eje x y los del porcentaje del error total correspondientes a cada h en el eje y; y la de la derecha, de la misma manera los valores de h en el eje x y los valores del error correspondientes a cada h en el eje y. En ambas de color azul para el error de truncamiento y de rojo para el de redondeo. Al analizar los gr´ aficos se puede apreciar que al ir cambiando (disminuyendo) el valor de h, al inicio el error de truncamiento no es representativo en el error total cuyo valor depende totalmente del error de redondeo, luego el de redondeo disminuye y el de truncamiento aumenta hasta llegar a un punto de equilibrio, aproximadamente cuando h = 1x10−3 en donde cada error representa la mitad del total; el proceso disminuci´on-aumento contin´ ua respectivamente hasta cuando h = 2x10−3 en donde los porcentajes son lo contrario que al inicio, es decir el error total se debe al error de truncamiento y el error de redondeo tiende a 0. As´ı se concluye repitiendo lo antes ya dicho: la mejor presici´on no se consigue con el valor de h m´ as pequeno posible, sino con un valor que sin producir un gran error de redondeo disminuya lo sifuiciente el error de truncaci´on.

15

16