Sunteți pe pagina 1din 12

Instituto Tecnol ogico de L azaro C ardenas Ingenier a Electr onica Programa en MATLAB

Asignatura: An alisis Num erico


Docente: M.C. Julio C esar Gallo Sanchez

Alumno: Jos e Armando Lara Ramos

4o Semestre

Febrero 8 de 2012

Jos e Armando Lara Ramos

1.

M etodo de Bisecci on
El m etodo de bisecci on es un enfoque intuitivo simple para resolver f (x) = 0. (1)

Se asume que f (x) R, y que x R. Este m etodo se basa en el siguiente teorema.

1.1.

Teorema del Valor Intermedio

Si f |[a, b] R es continua en el intervalo cerrado limitado por [a, b], y y0 R es tal que f (a) y0 f (b), entonces hay un x0 [a, b] tal que f (x0 ) = y0 . En otras palabras una funci on continua en un intervalo cerrado toma de todos los valores entre f (a) y f (b) al menos una vez.

1.2.

Forma de Trabajo del M etodo de Bisecci on

El m etodo de bisecci on trabaja como sigue. Suponemos que tenemos un intervalo tal que f (a0 )f (b0 ) < 0, (2) lo que signica que f (a0 ) y f (b0 ) tienen signos opuestos. Por el teorema del valor intermedio debe haber un p (a0 , b0 ) tal que f (p) = 0. Decimos que [a0 , b0 ] encierra a la ra z p. Suponiendo que 1 (3) p0 = (a0 + b0 ). 2 Este es el punto medio del intervalo [a0 , b0 ]. Considerando los siguientes casos: 1. Si f (p0 ) = 0, entonces p = p0 y hemos encontrado una ra z. Nos debemos detener en este punto. 2. Si f (a0 )f (p0 ) < 0, entonces debe haber un caso en el que p [a0 , p0 ], as que ahora denimos un nuevo intervalo [a1 , b1 ] = [a0 , p0 ]. Este nuevo intervalo contiene la ra z. 3. Si f (p0 )f (b0 ) < 0, entonces debe haber un caso en el que p [p0 , b0 ], as que ahora denimos un nuevo intervalo [a1 , b1 ] = [p0 , b0 ]. Este nuevo intervalo contiene la ra z. Este proceso es repetido considerando el punto medio del nuevo intervalo, el cual 1 (4) p1 = (a1 + b1 ), 2 y considerando de nuevo los tres casos. En principio, el procesa cuando se llega al caso 1. En la pr actica, el caso 1 es improbable en parte debido a los efectos de los errores de redondeo, y por lo tanto necesitamos un criterio m as pr actico para detener el proceso. es

Jos e Armando Lara Ramos

1.3.

Pseudoc odigo del Algoritmo B asico

input [a0 , b0 ] que contiene a p; p0 := (a0 + b0 )/2; k := 0; mientras el criterio para detenerse no es cumplido, continuar si f (ak )f (pk ) < 0 continuar ak+1 := ak ; bk+1 := pk ; end; else continuar ak+1 := pk ; bk+1 := bk ; end; pk+1 := (ak+1 + bk+1 )/2; k := k + 1; end; Cuando el algoritmo termine, el u ltimo valor de pk+1 encontrado, es un es estimado de p. Vemos que el algoritmo de bisecci on construye la secuencia (pn ) = (p0 , p1 , P2 , . . . ) tal que l m pn = p, (5)
n

donde pn es el punto medio de [an , bn ], y f (p) = 0. La prueba formal de que este proceso funciona (i. e., nos da un u nico p tal que f (p) = 0) es debido a el siguiente teorema.

1.4.

Teorema de Intersecci on de Cantor


[a0 , b0 ] [a1 , b1 ] [an , bn ] , (6)

Suponemos que ([ak , bk ]) es una secuencia de intervalos cerrados tal que con l mn (bn an ) = 0=0. Hay un u nico punto p [an , bn ] para todo n Z+ :

[an , bn ] = p.
n=0

(7)

El m etodo de bisecci on produce (pn ) tal que an < pn < bn , y p [an , bn ] para todo 1 ( an + b n ) n Z+ . Como consecuencia, ya que pn = 2 ba (8) 2n para n Z+ , tal que l mn pn = p. Recordar que f es asumida continua en [a, b], as que l mn f (pn ) = f (p). As que ahora observamos que 1 1 |pn an | n |b a|, |bn pn | n |b a| (9) 2 2 |pn p| |bn an |

Jos e Armando Lara Ramos

por lo que v a |x y | = |(x z ) (y z )| |x z | + |y z | (desigualdad del tri angulo), tenemos |p an | |p pn | + |pn an | y similarmente |p bn | |p pn | + |pn bn | por lo tanto
n

1 1 1 ( b a ) + ( b a ) = (b a) 2n 2n 2n1 1 2n1 (b a)

(10)

(11) (12)

l m an = l m bn = p.
n

En cada paso la ra z p est a acotada inferior y superiormente. Esto implica que hay una subsecuencia [de(pn )] denotada (xn ) que converge a p tal que f (xn ) > 0 para todo n Z+ . Entonces f (p) = l m f (xn ) 0, f (p) = l m f (yn ) 0,
n n

(13)

lo que implica que f (p) = 0. Debemos concluir que el m etodo de bisecci on produce una secuencia (pn ) que converge en p tal que f (p) = 0. De esta forma el m etodo de bisecci on always works.

1.5.

Cu ando deber amos detener las iteraciones?


>0 (14) pn pn1 < (pn = 0) pn

Para cierta exactitud requerida

Deber amos dejar de iterar cuando la desigualdad se satisfaga. Esta condici on nos lleva a el an alisis de cuando pn es relativamente no muy diferente de pn1 . Existen otros criterios para parar de iterar pero la mayor a son basados en el conocimiento previo de p (valor a encontrar).

Jos e Armando Lara Ramos

2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44

C odigo del script biseccion.m

% Programa que calcula una ra z de una funci on por el m etodo de bisecci on clear disp(Ingresa la funci on de una variable independiente) disp(la cual dese e analizar, no se limite por la "x" en f(x),) f = input(puede ser cualquier otra literal. f(x)= ,s); alto = 0; while alto == 0 a = input(Ingresa la cota inferior de la ra z: ); b = input(Ingresa la cota superior de la ra z: ); ea = subs(f,a); eb = subs(f,b); if ea*eb > 0 disp(Las cotas encierran cero o m as de una ra z); disp(por favor ingresa otras cotas); else alto = 1; end end alto = 0; while alto == 0 disp(Selecciona 1 para seleccionar el criterio de error relativo) disp(entre aproximaciones o 2 para seleccionar por n umero) s = input(de iteraciones: ); switch s case 1 epsilon = input(Ingresa m aximo error relativo: ); alto = 1; case 2 maxit = input(Ingresa m aximo n umero de iteraciones: ); alto = 1; otherwise disp(Opci on no v alida, por favor selecciona 1 o 2) end end it = 1; alto = 0; while alto == 0 r = (a+b)/2; er = subs(f,r); if it > 1 err = abs((b-a)/(2*r)); if s == 1 if epsilon >= err alto = 1;

Jos e Armando Lara Ramos


end end if s == 2 if maxit <= it alto = 1; end end end disp([---Iteraci on n umero num2str(it) ---]) disp([La aproximaci on es: num2str(r)]) if it > 1 disp([El error relativo es: num2str(err)]) end disp([La aproximaci on esta entre: num2str(a) y num2str(b)]) if er == 0, alto = 1; elseif eb*er > 0, b = r; else a = r; end it = it + 1; end

45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Jos e Armando Lara Ramos

3.

Explicaci on de la l ogica del script biseccion.m

El n umero de l nea en el c odigo del script corresponde al n umero en cada paso de la explicaci on 1. Descripci on muy breve del programa, a la cual el usuario puede tener acceso escribiendo en la ventana de comandos help biseccion. 2. Se limpian las variables para prevenir contenidos basura. 3. Se solicita la funci on de una sola variable. 4. Se explica que no necesariamente tiene que ser x la variable independiente. 5. Se guarda en la variable f la funci on en formato de candena de caracteres. 6. Se inicializa una variable alto en cero la cual se ocupar a posteriormente para detener ciclos while. 7. Se inicia un ciclo while para poder solicitar y analizar las cotas ingresadas por el usuario las veces que sean necesarias. 8. Se solicita al usuario la cota inferior de la ra z y se almacena en la variable a. 9. Se solicita al usuario la cota superior de la ra z y se almacena en la variable b. 10. Se evalua la cota inferior de la ra z a y se guarda en la variable ea. 11. Se evalua la cota superior de la ra z b y se guarda en la variable eb. 12. Se inicia un if el cual verica si existe un cambio de signo entre las evaluaciones de a y b, es decir, si hay una ra z entre estas dos cotas. 13. En caso de no haber una ra z entre las dos cotas, o que haya m as de una, se le informa al usuario. 14. Posteriormente si no fueron v alidas las cotas, se le solicitan al usuario nuevas cotas. 15. En caso de que las cotas sean v alidas se ejecuta la siguiente l nea 16. La variable alto se pone en uno y esta ser a la u ltima vez que el programa solicita las cotas. 17. Termina else que pone a alto en uno. 18. Termina while que solicita las cotas. 19. La bandera alto se pone en cero para una posterior utilizaci on tambi en como bandera.

Jos e Armando Lara Ramos 20. Se inicia un ciclo while mientras la bandera alto se encuentre igual a cero.

21. Despliega en la pantalla un mensaje al usuario mostrando la opci on del criterio del error relativo entre aproximaciones para el detenimiento de iteraciones. 22. En esta l nea se muestra el resto del mensaje de la l nea anterior, en este caso mostrando la opci on de detenimiento por alg un n umero de iteraciones deseado por el usuario. 23. La opci on (ya sea 1 o 2) se guarda en la variable s. 24. Se usa el comando switch para realizar ciertas acciones dependiendo de que criterio para el detenimiento de iteraciones seleccion o el usuario. 25. Si el usuario eligi o por medio de error relativo entonces s = 1 y se ejecutar a la siguiente l nea. 26. Se solicita el error relativo m aximo entre las aproximaciones de dos iteraciones sucesivas, esta se guarda en la variable epsilon. 27. Posteriormente se pone la bandera alto en uno para terminar el ciclo while. 28. Si el usuario eligi o el criterio por un n umero de iteraci on espec co entonces s = 2 y la siguiente l nea se ejecutar a. 29. Se solicita el n umero m aximo de iteraciones a realizar y se guarda en la variable maxit. NOTA: Por lo general el n umero m aximo de iteraciones es el n umero exacto de iteraciones que el programa ejecutar a, esto solo no pasa cuando el n umero de iteraciones es menor a uno. Como es absurdo realizar menos de una iteraci on, el programa realiza por lo menos una iteraci on para encontrar un resultado. 30. Posteriormente se pone la bandera alto en uno para terminar el ciclo while. 31. Si el usuario no eligi o ning un criterio y puls o alguna otra tecla entonces el programa ejecuta la siguiente l nea. 32. Se despliega un mensaje solicitando otra vez la elecci on del m etodo para detener las iteraciones. 33. Termina el bloque switch. 34. Termina el bloque while encargado de las solicitudes de error y n umeros de iteraciones. 35. Se inicializa la variable it en uno, ya que expresa el n umero de iteraciones y se comienza con la primera iteraci on.

Jos e Armando Lara Ramos 36. Se pone alto en cero para ser de nuevo utilizada.

37. Inicia ciclo while el cual tiene en su cuerpo el c odigo del m etodo de bisecci on. 38. Se guarda en r la aproximaci on de la iteraci on en curso. 39. Se guarda en er la evaluaci on de la funci on en la aproximaci on reci en obtenida. 40. Inicia if para c alculo de error relativo, por lo tanto solo es de la segunda iteraci on en adelante. 41. Se calcula el error relativo y se guarda en err. 42. Si se eligi o detener las iteraciones por error relativo entonces lo siguiente se ejecuta. 43. Se compara si el error relativo m aximo puesto por el usuario es a un menor al error relativo actual. 44. En caso de ser cierta la l nea anterior, la bandera alto se coloca en uno. 45. Termina if de comparaci on de errores. 46. Termina if para opci on de error absoluto. 47. Se ejecuta lo siguiente si se eligi o el modo de detenimiento por n umero de iteraciones. 48. Se compara si el n umero de iteraciones m aximas es menor que el n umero de iteraci on actual. 49. De ser cierta la l nea anterior, la bandera alto se coloca en uno. 50. Termina if de comparaci on de iteraciones. 51. Termina if para opci on de n umero de iteraciones. 52. Termina if que se ejecuta solo en iteraciones mayor uno. 53. Se despliega el n umero de iteraci on en el que se va en la pantalla. 54. Se despliega la aproximaci on actual. 55. Si el n umero de iteraci on es mayor a uno se va a desplegar lo siguiente. 56. Se despliega el error relativo. 57. Termina if para el despliegue del error relativo. 58. Se despliega las cotas que encierran la aproximaci on actual.

Jos e Armando Lara Ramos

10

59. Inicia if que compara la evaluaci on de la funci on en la aproximaci on actual con cero, con el objetivo de determinar si la aproximaci on actual es ra z exacta. 60. De ser cierta la l nea anterior, alto se coloca en uno, evitando la nueva ejecuci on del ciclo while. 61. Se compara si hay cambio de signo en la evaluaci on de la funci on en la cota superior y el punto medio. 62. Si no hay una ra z entre b y r entonces la cota superior es ahora r. 63. Si la ra z si est a entre b y r entonces se ejecuta la siguiente l nea 64. La cota inferior es ahora r. 65. Termina if que detecta la localizaci on de la ra z. 66. Se incrementa en uno el n umero de iteraciones. 67. Termina ciclo while que tiene el m etodo de bisecci on.

4.

Ejecuci on del Programa

Como ejemplo de la ejecuci on del programa en la ventana de comandos se realizar an los c alculos para encontrar las ra ces de la ecuaci on f (x) = 0,874x2 + 1,75x + 2,627 (15)

las cuales ser an dos a lo m as. Primeramente gracamos la funci on para calcular por el m etodo gr aco un rango aproximado en el cual se encuentran la o las ra ces. En la Figura 1 se muestra la gr aca de la Ecuaci on 15.

Figura 1: Gr aca de y = 0,874x2 + 1,75x + 2,627.

Jos e Armando Lara Ramos

11

Se puede observar como la primera ra z queda entre x = 2 y x = 0, y una segunda ra z entre x = 2 y x = 4. Nuestro objetivo es calcular las ra ces con un error relativo entre las u ltimas dos aproximaciones no mayor a 0.01 (es decir un porcentaje de error relativo no mayor de el 1 %). A continuaci on se muestra el ingreso de la funci on, las cotas y el criterio para parar de iterar en el programa.

Figura 2: Ingreso de datos al programa.

Jos e Armando Lara Ramos Posteriormente se despliegan los resultados.

12

Figura 3: Despliegue de resultados.

Referencias
[1] An Introduction to Numerical Analysis for Electrical and Computer Engineers, Chistopher J. Zarowski, Editorial Wiley, ISBN 0-471-46737-5. [2] http://www.mathworks.com/help (Sitio de ayuda ocial de Matlab) [3] Numerical Methods for Mathematics, Science and Engineering, 2nd Ed, 1992

S-ar putea să vă placă și