Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b %...

19

Click here to load reader

Transcript of Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b %...

Page 1: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Método de dicotomía

a0

!

b0x0 a1

!

b1x1 a2 b2

x2

En cada iteración se descarta la mitad del intervalo que no contiene a la raíz(en la que f no cambia de signo).

Page 2: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Se construye así una sucesión de intervalos encajados

[a, b] = [a0, b0] ⊃ [a1, b1] ⊃ [a2, b2] ⊃ · · · ⊃ [ak, bk] ⊃ . . . ,

que siempre contienen al punto α.

El intervalo donde se encuentra la raíz es cada vez más pequeño y, su puntomedio se acerca cada vez más a la solución buscada.

Si el intervalo inicial es [a, b], tras la n-ésima subdivisión se tendrá el cerolocalizado en un intervalo [an, bn]. Por tanto si elegimos su punto medio xn =

(an+ bn)/2 como aproximación del cero de f en [a, b], cometemos un error nosuperior a en = (bn − an)/2. En consecuencia, si queremos aproximar la raízcon un error no superior a ε, bastará con terminar este proceso cuando en ≤ ε.

Page 3: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Algoritmo de dicotomía (variante 1)

a) Elegir ε > 0. Tomar n = 0, a0 = a, b0 = b y e0 = (b0 − a0)/2.

b) Dados n ≥ 0, [an, bn] tal que f(an)f(bn) < 0 y en = (bn − an)/2, tomar

xn =an+ bn

2.

b.1) Si |en| ≤ ε, parar y devolver xn como aproximación de la solución.

b.2) Si f(an)f(xn) < 0, hacer an+1 = an , bn+1 = xn.

b.3) Si f(xn)f(bn) < 0, hacer an+1 = xn, bn+1 = bn.

c) Hacer en+1 = en/2 y n = n+1 y volver al paso b).

Page 4: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Algoritmo de dicotomía (variante 2) (considerando la posibilidad de quepuede ser directamente f(xn) ≈ 0 para algún n).

a) Elegir ε > 0 y tol > 0. Tomar n = 0, a0 = a, b0 = b y e0 = (b0 − a0)/2.

b) Dados n ≥ 0, [an, bn] tal que f(an)f(bn) < 0 y en = (bn − an)/2, tomar

xn =an+ bn

2.

b.1) Si |en| ≤ ε o bien |f(xn)| < tol, parar y devolver xn como aproximaciónde la solución.

b.2) Si f(an)f(xn) < 0, hacer an+1 = an , bn+1 = xn.

b.3) Si f(xn)f(bn) < 0, hacer an+1 = xn, bn+1 = bn.

c) Hacer en+1 = en/2 y n = n+1 y volver al paso b).

Page 5: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Algoritmo de dicotomía (pseudo-código ) (correspondiente a la versión 2)

a) Datos de entrada: a, b, ε(> 0) y tol(> 0).Hacer n = 0 y e = (b− a)/2.

b) Dados n, a, b y e, calcular x =a+ b

2

b.1) Si |e| ≤ ε o bien |f(x)| < tol, parar y devolver x como aproximación dela solución.

b.2) Si f(a)f(x) < 0, hacer b = x.

b.3) Si no, hacer a = x

c) Hacer x =a+ b

2, e = e/2 y n = n+1 y volver al paso b).

Page 6: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Programa dicotomia1 (la función tiene que estar definida en una M-funciónde nombre fdic.m)

function [x] = dicotomia1(a,b,epsi,tol)%% dicotomia1(a,b,eps,tol) devuelve una aproximacion del% unico cero de la M-función fdic entre a y b% La función fdic debe ser continua y tener signos% distintos en a y b% Metodo utilizado: biseccion% Argumentos:% a,b : extremos de un intervalo con un cero de fcn% epsi : se detiene el algoritmo si |x-sol_exacta|<epsi% tol : se detiene el algoritmo si |f(x)|<tol%% La funcion fdic debe ser una M-funcion, en un fichero fdic.m%

Page 7: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

% Inicio y preparacion de las iteraciones%

fa = fdic(a);fb = fdic(b);if ( fa*fb > 0 )

error(’La funcion debe cambiar de signo en el intervalo’);end

e = (b-a)*0.5;x = (a+b)*0.5;

Page 8: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

% Nucleo de las iteraciones%while abs(e)>epsi

fx = fdic(x);if ( abs(fx)<tol )

returnendif (fa*fx > 0)

a = x;fa = fx;

elseb=x;fb = fx;

endx = (a+b)*0.5;e = e*0.5;

end

Page 9: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Para usar el programa anterior hay que tener la función f(x), que define laecuación f(x) = 0 programada, necesariamente, como una M-función en unfichero de nombre fdic.m.

Por ejemplo, para aproximar la solución de la ecuación x ex − 2 = 0, que estáen el intervalo [0,1], habría que escribir, en un fichero de nombre fdic.m elsiguiente código:

function [y] = fdic(x)y = x.*exp(x)-2;

y luego, por ejemplo, desde la ventana de comandos, usar la función dicotomia1:

>> dicotomia1(0,1,1.e-6,1.e-8)

Page 10: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Cuando usábamos la función fzero para aproximar la misma solución escribía-mos:

>> fezero( @fdic , [0,1] )

O bien, podríamos definir la función f(x) = x ex−2 como una función anónima:

>> fun = @(x) x.*exp(x)-2;>> fezero( fun , [0,1] )

ya que la función fzero admite que se le envíe la expresión de f(x) comoargumento.

Queremos poder hacer lo mismo con nuestra función dicotomia, es decir poderenviar el nombre de la función como argumento de dicotomia. Para ello, hayque escribirla en una forma ligeramente diferente:

Page 11: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Programa dicotomia2 (el nombre de la función entra como argumento)

function [x] = dicotomia2(fun,a,b,epsi,tol)%% dicotomia1(fun,a,b,eps,tol) devuelve una aproximacion del% unico cero de la función fun entre a y b% La función fun debe ser continua y tener signos% distintos en a y b%% Metodo utilizado: biseccion%% Argumentos:% fun : un handle a una función% a,b : extremos de un intervalo con un cero de fcn% epsi : se detiene el algoritmo si |x-sol_exacta|<epsi% tol : se detiene el algoritmo si |f(x)|<tol%

Page 12: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

% Cuando el nombre de la funcion viene como argumento,% no se puede evaluar directamente.% Es necesario utilizar la función feval como aqui:%

fa = feval(fun,a);fb = feval(fun,b);if ( fa*fb > 0 )

error(’La funcion debe cambiar de signo en el intervalo’);end

e = (b-a)*0.5;x = (a+b)*0.5;

Page 13: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

% Nucleo de las iteraciones%while abs(e)>epsi

fx = feval(fun,x);if ( abs(fx)<tol )

returnendif (fa*fx > 0)

a = x;fa = fx;

elseb=x;fb = fx;

endx = (a+b)*0.5;e = e*0.5;

end

Page 14: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Con esta segunda versión del programa dicotomia, la función f(x) ya notendría que llamarse obligatoriamente fdic y se podría usar de las siguientesdistintas formas:

>> dicotomia2(@fdic,0,1,1.e-6,1.e-8)

(si estuviera en un fichero de nombre fdic.m) o bien

>> mifun = @(x) x.*exp(x)-2;>> dicotomia2(mifun,0,1,1.e-6,1.e-8)

(si fuera una función anónima)

Ejercicio: Utilizar el programa dicotomia2 con varias ecuaciones, utilizandodistintos intervalos y distintos valores para los parámetros de los test de parada,eps y tol. Comparar con los resultados obtenidos utilizando la función fzero,observando el número de cifras decimales que coinciden.

Page 15: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Método de Regula Falsi

Se divide el intervalo utilizando el punto de corte con el eje OX de la secanteque pasa por los puntos (a, f(a)) y (b, f(b)).

Page 16: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Ecuación de la recta que pasa por los puntos (a, f(a)) y (b, f(b))

y =(f(b)− f(a)

)x+

(f(a)b− f(b)a

)

Punto de corte con el eje OX

c =f(b)a− f(a)bf(b)− f(a)

Page 17: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Algoritmo de Regula Falsi (pseudo-código)

a) Datos de entrada: a, b, ε(> 0) y tol(> 0).Hacer n = 0.

b) Dados n, a y b, calcular x =f(b)a− f(a)bf(b)− f(a)

b.1) Si |b − a| ≤ ε o bien |f(x)| < tol, parar y devolver x como aproximaciónde la solución.

b.2) Si f(a)f(x) < 0, hacer b = x.

b.3) Si no, hacer a = x

c) Hacer x =f(b)a− f(a)bf(b)− f(a)

y volver al paso b).

Page 18: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

Ejercicios

1. Tomando como punto de partida el programa dicotomia2.m, escribir unprograma RegulaFalsi1.m que implemente el algoritmo anterior. Comprobarsu buen funcionamiento con varios ejemplos que planteen las distintasposibilidades que pueden darse.

2. Se desea comparar el número de iteraciones que, con las mismas condicio-nes de precisión exigida, realizan el método de dicotomía y el de RegulaFalsi. Para ello:

a) Modificar convenientemente el programa dicotomia2.m para que devuel-va, además de la solución, el número de iteraciones realizadas. Guardareste programa con el nombre dicotomia.m (esta es la última y definitivaversión)

function [x,Niter] = dicotomia(fun,a,b,eps,tol)

Page 19: Método de dicotomía · c)Haceren+1 = en=2 yn= n+ 1 yvolveralpasob). ... % distintos en a y b % Metodo utilizado: biseccion % Argumentos: % a,b : extremos de un intervalo con un

b) Modificar convenientemente el programa RegulaFalsi1.m para que de-vuelva, además de la solución, el número de iteraciones realizadas. Guar-dar este programa con el nombre RegulaFalsi.m (esta es la última ydefinitiva versión)

function [x,Niter] = RegulaFalsi(fun,a,b,eps,tol)

c) Diseñar un conjunto de ejemplos para la comparación: comparar ambosprogramas con distintas funciones e intervalos (funciones con mayor ymenor pendiente, intervalos que contienen un cero más o menos cercadel centro o de alguno de sus extremos, . . . )