GIIT_AMA_18_Numérico_Tutorial 1

200 days ago by etlopez18

Cálculo de los ceros de una función

Método de la bisección

Comencemos definiendo una función para aplicar el método y un intervalo donde sea continua y tenga un cero. Vamos a aplicar el algoritmo para calcular la raíz de f(x)=-x+cos(x) en el intervalo $[0,1.6]$.

f(x)=-x+cos(x); a,b=0.0,1.6 
       

Representamos la función para ver que tiene un cero en ese intervalo. Nótese que no haría falta representarla sino comprobar que cambia de signo en los extremos del intervalo.

plot(f(x),(x,a,b),thickness=3) 
       

¿El punto en el que tiene el cero está a la izquierda o a la derecha del punto medio del intervalo, $0.8$? Aunque en el dibujo parece estar a la izquierda, podemos asegurarnos viendo el valor de la función en ese punto.

c=(a+b)/2 c 
       
f(c) 
       

Como es negativo, sabemos que el cero estará a la derecha (por el Teorema de Bolzano, ya que la función es continua).

Es decir, que sabemos que la raíz está en el intervalo $[0,0.8]$. Así que podemos considerar ese intervalo y repetir el proceso tantas veces como queramos para que el intervalo sea más pequeño.

b=c; a,b 
       
plot(f(x),(x,a,b),thickness=3) 
       

Ahora repetimos el proceso.

c=(a+b)/2.0 c 
       
f(c) 
       

Como es positivo, sabemos que la solución está en el intervalo $[0.4,0.8]$.

a=c; a,b 
       
plot(f(x),(x,a,b),thickness=3) 
       


Practica:

1. Aplica 4 pasos del método de la bisección a la función $f(x)=e^{-x}-sen(x)$ para encontrar una raíz entre -0.2 y 1.1.

 
       

Método de Newton-Raphson

Apliquemos el método para calcular la raíz de la función $f(x)=e^x-4$, partiendo de $x_0=1.6$

f(x)=e^x-4 plot(f(x),(x,0,2)) 
       

Tomamos el punto inicial $c=1.6$.

c=1.6; 
       

Aplicamos el método.

c=c-(f(c)/f.diff(x)(c)) ; c.n() 
       

Evaluando la celda de manera iterada, vamos obteniendo las sucesivas aproximaciones. 

f(x)=e^x-4 c=1.6; for i in [1..4]: c=(c-(f(c)/f.diff(x)(c))).n() ; c 
       

Como podemos comprobar, llegaremos al valor exacto de la raíz, que no es otra que ln4

ln(4).n() 
       

Podemos representar gráficamente el método:

f(x)=e^x-4 P=plot(f(x),(x,1,1.8)) c=1.6; for i in [1..4]: P+=line([(c,0),(c,f(c))], color='red',thickness=2) P+=line([(c,f(c)),(c-(f(c)/f.diff(x)(c)),0)], color='black',thickness=2) c=(c-(f(c)/f.diff(x)(c))).n(); P 
       

 

 

Estimación del error mediante la diferencia entre dos valores consecutivos

Supongamos que queremos un error menor que $10^{-5}$. Una manera usual de estimarlo es ir restando a cada valor obtenido el anterior.

f(x)=e^x-4 x0=1.6; print "Punto inicial: ",x0 for i in [1..5]: xcopia=x0 x0=(x0-(f(x0)/f.diff(x)(x0))).n() ; print "Iteración ",i, ": ",x0 error=abs(x0-xcopia); print "Error:",error; print "Derivada: ",f.diff(x)(x0) 
       

A partir de los datos anteriores, podemos ver que 4 pasos serían suficientes.

Practica:

2. Aplica el método de Newton-Raphson a la función $f(x)=1-x-sen(x)$ para encontrar una raíz entre 0 y 1 con 4 cifras decimales de precisión.

 
       


Método del punto fijo

Consideramos el problema f(x)=-3x+e^(-x)=0, partiendo de x0=1. La función para el método de punto fijo será F(x)=e^(-x)/3.

F(x)=e^(-x)/3 
       
x0=1.0; F(x0) 
       

El método consiste en aplicar la función F de forma sucesiva. Por ello, bastará con evaluar sucesivamente la siguiente celda:

x0=F(x0); x0.n() 
       

Lo podemos automatizar mediante un bucle:

F(x)=e^(-x)/3 x0=1.0 for i in range(1,5): x0=F(x0).n(); x0 
       

Y gráficamente:

F(x)=e^(-x)/3 g1=plot(F(x),(x,0,1),thickness=3)+plot(x,(x,0,1),color='red',thickness=2) g1=g1+line([(0,0),(0,1)], color='yellow',linestyle='--',thickness=3)+line([(0,1),(1,1)], color='yellow',linestyle='--',thickness=3)+line([(1,1),(1,0)], color='yellow',linestyle='--',thickness=3)+line([(1,0),(0,0)], color='yellow',linestyle='--',thickness=3) x0=1.0 for i in range(1,5): g1+=line([(x0,x0),(x0,F(x0))], color='green',thickness=2)+line([(x0,F(x0)),(F(x0),F(x0))], color='green',thickness=2) x0=F(x0).n(); x0 g1 
       

Podemos observar que $F(x)\in [0,1]$ para todo $x\in[0,1]$ pues la gráfica (azul) está contenida en el cuadrado amarillo. Por otra parte, vamos a ver que la derivada en valor absoluto es menor que $1$ por lo que tenemos asegurada la convergencia para todo punto inicial en $[0,1]$:

plot(F.derivative(x),(x,0,1)) 
       

Se puede observar que el máximo del valor absoluto se alcanza en $0$. Luego $K=F'(0)=1/3$ y el error cometido en tres pasos es como máximo:

K=F.diff(x)(0) (K^2*abs(F(1)-1)/(1-K)).n() 
       

Practica:

3. Aplica 4 pasos del método del punto fijo a la función $F(x)=e^{-x/4}-sen(x/4)$ para encontrar un punto fijo partiendo de $x_0=1$. Estima el error cometido.