Sunteți pe pagina 1din 17

Facultad de Ingeniera

Mtodos Numricos
Prof. Ing. Fernando Zalamea

TRABAJO #1
Mtodo: Biseccin, Punto Fijo, Newton,
Secante y Posicin Falsa

WALTER BECERRA MOREIRA.


FREDDY CORONEL ZAMORA.

FECHA DE ENTREGA
19/10/2017

1
INTRODUCCION
El presente trabajo fue realizado con la finalidad de dar a conocer la codificacin de los
diferentes mtodos para encontrar races de funciones adems se realizaron problemas de
aplicacin para mejorar los conocimientos adquiridos

METODO BISECCION
En matemticas, el mtodo de biseccin es un algoritmo de bsqueda de races que trabaja
dividiendo el intervalo a la mitad y seleccionando el sub intervalo que tiene la raz. Este es uno
de los mtodos ms sencillos y de fcil intuicin para resolver ecuaciones en una variable,
tambin conocido como Mtodo de Intervalo Medio

SEUDOCODIGO
Identificar datos de entrada:
f(x)=0 Funcin
a,b Intervalo de bsqueda de la raz
tol Tolerancia
Nmax Nmero mximo de iteraciones

Salida del algoritmo


Mensaje de fracaso Se ha sobrepasado el nmero de iteraciones
Mensaje de la respuesta La raz de la funcin es:,p

Pasos
i=1
mientras (iNmax) entonces
p=(a+b)/2
Si (|f(p)| < 0), entonces
Salida: la raz se la funcin esp
parar
Si (|f(a)| |f(b)| < 0), entonces
b=p
Si no a=p
i=i+1
Salida: Se ha sobrepasado el nmero de iteraciones
Parar.

2
CODIGO MATLAB

CODIGO FORTRAN
SUBROUTINE biseccion(f,a,b,n,tol,raiz,clave)
! ---------------------------------------------------
! METODO DE BISECCION para encontrar una solucin
! De f(x)=0 dada la funcin continua f en el intervalo
! [a,b] donde f(a) y f(b) tienen signos opuestos.
! ---------------------------------------------------
! Bloque de declaracin de argumentos
! ---------------------------------------------------
INTERFACE
REAL(WP) FUNCTION f(x) ! Funcin que define la ecuacin
IMPORT :: WP
IMPLICIT NONE
REAL(WP), INTENT(IN) :: x
END FUNCTION f END
INTERFACE
REAL(WP), INTENT(IN) :: a ! Extremo izquierdo del intervalo inicial

3
REAL(WP), INTENT(IN) :: b ! Extremo derecho del intervalo inicial 2
INTEGER, INTENT(INOUT) :: n ! Lmite de iteraciones/iteraciones realizadas
REAL(WP), INTENT(IN) :: tol ! Tolerancia para el error absoluto
REAL(WP), INTENT(OUT) :: raiz ! Aproximacin a la raiz
INTEGER, INTENT(OUT) :: clave ! Clave de xito:
! 0 : xito
! >0 : iteraciones excedidas
! <: no se puede proceder
! ---------------------------------------------------
! Bloque de declaracin de variables locales
INTEGER :: i
REAL(WP) :: xl, xr, error
! ---------------------------------------------------
! Bloque de procesamiento
! ---------------------------------------------------
clave = 1
xl = a
xr = b
IF (SIGN(1.0_WP,f(xl))*SIGN(1.0_WP,f(xr)) > 0.0_WP) THEN
clave = -1
RETURN
ENDIF
DO i=1,n
error = (xr-xl)*0.5_WP
raiz = xl + error
IF (error < tol) THEN
clave = 0
n=i
EXIT
ENDIF
IF ( SIGN(1.0_WP,f(xl))* SIGN(1.0_WP,f(raiz)) > 0.0_WP) THEN
xl = raiz
ELSE
xr = raiz
ENDIF
ENDDO
! ---------------------------------------------------
END SUBROUTINE biseccion

4
METODO PUNTO FIJO
El procedimiento empieza con una estimacin o conjetura inicial de x, que es mejorada por iteracin
hasta alcanzar la convergencia. Para que converja, la derivada (dy/dx) debe ser menor que 1 en
magnitud (al menos para los valores x que se encuentran durante las iteraciones). La convergencia
ser establecida mediante el requisito de que el cambio en x de una iteracin a la siguiente no sea
mayor en magnitud que alguna pequea cantidad

SEUDOCODIGO
Identificar datos de entrada:
g(x) Funcin obtenida en f(x)=0 ; x=g(x)
Xo Aproximacion Inicial
tol Tolerancia
Nmax Nmero mximo de iteraciones

Salida del algoritmo


Mensaje de fracaso Se ha sobrepasado el nmero de iteraciones
Mensaje de la respuesta La raz de la funcin es:,p

Pasos
i=1
mientras (iNmax) entonces
x=g(Xo)
Si (|x Xo| < tol), entonces
Salida: la raz se la funcin esp
parar
Xo=X
=+1
Salida: Se ha sobrepasado el nmero de iteraciones
Parar

Nota: no siempre converge con este mtodo porque el valor Xo puede haber ya pasado la raz
y est ms se aleja.

5
CODIGO MATLAB

CODIGO FORTRAN
SUBROUTINE punto_fijo(f,x0,n,tol,raiz,clave)
! ---------------------------------------------------
! ALGORITMO DE PUNTO FIJO o DE APROXIMACIONES SUCESIVAS
! para encontrar una solucin de x=f(x) dada una
! aproximacin inicial x0.
! ---------------------------------------------------
! Bloque de declaracin de argumentos
! ---------------------------------------------------
INTERFACE
REAL(WP) FUNCTION f(x) ! Funcin que define la ecuacin
IMPORT :: WP
IMPLICIT NONE
REAL(WP), INTENT(IN) :: x
END FUNCTION f
END INTERFACE
REAL(WP), INTENT(IN) :: x0 ! Aproximacin inicial a la raz
INTEGER, INTENT(INOUT):: n ! Limite de iteraciones/iteraciones realizadas
REAL(WP), INTENT(IN) :: tol ! Tolerancia para el error relativo
REAL(WP), INTENT(OUT) :: raz ! Aproximacin a la raiz
INTEGER, INTENT(OUT) :: clave ! Clave de xito:
! 0 : xito

6
! >0 : iteraciones excedidas
! ---------------------------------------------------
! Bloque de declaracin de variables locales
! ---------------------------------------------------
INTEGER :: i
REAL(WP) :: xx0
! ---------------------------------------------------
! Bloque de procesamiento
! ---------------------------------------------------
clave = 1
xx0 = x0
DO i=1,n
raiz = f(xx0)
IF (ABS(raiz-xx0) < tol*ABS(raiz)) THEN
clave = 0
n=i
EXIT
ENDIF
xx0 = raiz
END DO
! ---------------------------------------------------
END SUBROUTINE punto_fijo

7
METODO NEWTON
En anlisis numrico, el mtodo de Newton (conocido tambin como el mtodo de Newton-
Raphson o el mtodo de Newton-Fourier) es un algoritmo eficiente para encontrar
aproximaciones de los ceros o races de una funcin real. Tambin puede ser usado para
encontrar el mximo o mnimo de una funcin, encontrando los ceros de su primera derivada.
El mtodo de Newton-Raphson es un mtodo abierto, en el sentido de que no est garantizada
su convergencia global. La nica manera de alcanzar la convergencia es seleccionar un valor
inicial lo suficientemente cercano a la raz buscada. As, se ha de comenzar la iteracin con un
valor razonablemente cercano al cero (denominado punto de arranque o valor supuesto).

SEUDOCODIGO
Identificar datos de entrada:
f(x) Funcin
Xo Valor Inicial
tol Tolerancia
Nmax Nmero mximo de iteraciones
g(x) derivada de f(x)

Salida del algoritmo


Mensaje de fracaso Se ha sobrepasado el nmero de iteraciones
Mensaje de la respuesta La raz de la funcin es:,x

Pasos
i=1
mientras (iNmax) entonces
()
= ()
| |
=
||
Si ( < tol), entonces
Salida: la raz se la funcin es, x
parar
Xo=X
=+1

8
Salida: Se ha sobrepasado el nmero de iteraciones
Parar

CODIGO MATLAB

CODIGO FORTRAN
SUBROUTINE newton(f,df,x0,n,tol,raiz,clave)

! ---------------------------------------------------
! Metodo DE NEWTON-RAPHSON para encontrar
! solucin de f(x)=0 dada la funcin derivable
! f y una aproximacin inicial x0.
! --------------------------------------------------
! Bloque de declaracin de argumentos
! ---------------------------------------------------
INTERFACE
REAL(WP) FUNCTION f(x) ! Funcin que define la ecuacin
IMPORT :: WP
IMPLICIT NONE
REAL(WP), INTENT(IN) :: x
END FUNCTION f
REAL(WP) FUNCTION df(x) ! Derivada de la funcin
IMPORT :: WP ! que define a la ecuacin
IMPLICIT NONE
REAL(WP), INTENT(IN) :: x
END FUNCTION df
END INTERFACE
REAL(WP), INTENT(IN) :: x0 ! Aproximacin inicial a la raz
INTEGER, INTENT(INOUT) :: n ! Lmite de iteraciones/iteraciones realizadas

9
REAL(WP), INTENT(IN) :: tol ! Tolerancia para el error relativo
REAL(WP), INTENT(OUT) :: raiz ! Aproximacin a la raz
INTEGER, INTENT(OUT) :: clave ! Clave de xito:
! 0 : xito
! >0 : iteraciones excedidas
! ---------------------------------------------------
! Declaracin de variables locales
! ---------------------------------------------------
INTEGER :: i
REAL(WP) :: xx0 ! ---------------------------------------------------
! Bloque de procesamiento
! ---------------------------------------------------
clave = 1
xx0 = x0
DO i=1,n
raiz = xx0 - f(xx0)/df(xx0)
IF (ABS(raiz-xx0) < tol*ABS(raiz) ) THEN
clave = 0
n=i
EXIT
ENDIF
xx0 = raiz
END DO
! ---------------------------------------------------
END SUBROUTINE newton

10
METODO SECANTE
El mtodo de la secante parte de dos puntos (y no slo uno como el mtodo de Newton) y estima
la tangente (es decir, la pendiente de la recta) por una aproximacin de acuerdo con la
expresin:

Sustituyendo esta expresin en la ecuacin el mtodo de Newton, obtenemos la expresin del


mtodo de la secante que nos proporciona el siguiente punto de iteracin:

SEUDOCODIGO
Identificar datos de entrada:
f(x) Funcin
Xo Valor Inicial
X1 Valor primero
tol Tolerancia o error
Nmax Nmero mximo de iteraciones

Salida del algoritmo


Mensaje de fracaso Se ha sobrepasado el nmero de iteraciones
Mensaje de la respuesta La raz de la funcin es:,x

Pasos
Yo = f(Xo)
Si
Y1 = f(X1)
Contador=0
Error=tolerancia+1

11
Den= Y1 Yo
Mientras Hacer
X2 = X1 ((Y1*(X1 Xo))/Den)
Error = Abs((X2 X1)/ X2)
Xo = X1
Yo = Y1
X1 = X2
Y1 = f(X1)

Contador = Contador + 1
Fin Mientras
Si Y1 = 0 Entonces
Muestre: X1 es Raiz
Sino Si Error < Tolerancia Entonces
Muestre: X1 es una raiz aproximada con una tolerancia Tolerancia
Sino Si Den = 0 Entonces
Muestre: Hay posiblemente una raiz mltiple
Sino
Muestre: Fracaso en Iter iterraciones
Fin Si
Fin Si
Fin Si
Fin Si
Fin Proceso
CODIGO MATLAB

12
CODIGO FORTRAN
SUBROUTINE secante(f,x0,x1,n,tol,raiz,clave)
! ---------------------------------------------------
! ALGORITMO DE LA SECANTE para encontrar una solucin
! de f(x)=0, siendo f una funcin continua, dada las
! aproximaciones iniciales x0 y x1.
! ---------------------------------------------------
! Bloque de declaracin de argumentos
! ---------------------------------------------------
INTERFACE
REAL(WP) FUNCTION f(x) ! Funcin que define la ecuacin
IMPORT :: WP
IMPLICIT NONE
REAL(WP), INTENT(IN) :: x
END FUNCTION f
END INTERFACE
REAL(WP), INTENT(IN) :: x0,x1 ! Aproximaciones iniciales a la raz
INTEGER, INTENT(INOUT):: n ! Lmite de iteraciones/iteraciones realizadas
REAL(WP), INTENT(IN) :: tol ! Tolerancia para el error relativo
REAL(WP), INTENT(OUT) :: raiz ! Aproximacin a la raiz
INTEGER, INTENT(OUT) :: clave ! Clave de xito:
! 0 : xito
! >0 : iteraciones excedidas
! ---------------------------------------------------
! Bloque de declaracin de variables locales
! ---------------------------------------------------
INTEGER :: i
REAL(WP):: xx0, xx1, fx0, fx1
! ---------------------------------------------------
! Bloque de procesamiento
! ---------------------------------------------------
clave = 1
xx0 = x0
xx1 = x1
fx0 = f(x0)
fx1 = f(x1)
DO i= 2,n
raiz = xx1 - fx1*((xx1-xx0)/(fx1-fx0))
IF (ABS(raiz-xx1) < tol*ABS(raiz)) THEN
clave = 0
n=i
EXIT
ENDIF
xx0 = xx1
fx0 = fx1
xx1 = raiz
fx1 = f(raiz)

13
END DO
! ---------------------------------------------------
END SUBROUTINE secante

METODO FALSA POSICION


El mtodo de la falsa posicin pretende conjugar la seguridad del mtodo de la biseccin con la
rapidez del mtodo de la secante. Este mtodo, como en el mtodo de la biseccin, parte de
dos puntos que rodean a la raz f(x) = 0, es decir, dos puntos x0 y x1tales que f(x0) f(x1) < 0. La
siguiente aproximacin, x2, se calcula como la interseccin con el eje X de la recta que une ambos
puntos (empleando la ecuacin del mtodo de la secante). La asignacin del nuevo intervalo de
bsqueda se realiza como en el mtodo de la biseccin: entre ambos intervalos, [x0, x2] y [x2,x1],
se toma aquel que cumpla f(x)f(x2) < 0. En la figura siguiente se representa geomtricamente
este mtodo.

SEUDOCODIGO
Identificar datos de entrada:
f(x) Funcin Fx
a primer valor
c segundo valor
e error

Salida del algoritmo


Mensaje de fracaso Se ha sobrepasado el nmero de iteraciones
Mensaje de la respuesta La raz de la funcin es:,x

Pasos
Evaluar
X=a
Fa = evaluar Fx
X=c
Fc = evaluar en Fx
Mientras valor absoluto (c-a) > e
Realizamos operacin b = (c*Fa-a*Fc)/(Fa-Fc)
x=b

14
Fb=evaluar en Fx
Si valor absoluto (Fc) < e
Parar
Adems
Si Fa * Fb <= 0
Asignar nuevo valor a las variables
c=b
Fc = Fb
Adems
a=b
Fa = Fb
Fin
Fin
Fin
Imprimir la raiz sera: b

CODIGO MATLAB

CODIGO FORTRAN
SUBROUTINE POSICION_FALSA(F,XA,XB,NMAX,TOL,RAIZ,ICLAVE)
---------------------------------------------------

15
METODO DE POSICION FALSA (POSICION_FALSA) (o mtodo de
las cuerdas) para encontrar una solucin de f(x)=0 dada la funcin
continua f en el intervalo [a,b] donde f(a) y f(b) tienen signos opuestos
---------------------------------------------------
Bloque de identificacin de argumentos
---------------------------------------------------
F = Funcin que define la ecuacin (arg entrada)
XA,XB = Extremos del intervalo (arg entrada)
NMAX = Nm. Mx. De iteraciones (arg entrada)
TOL = Tol. para el error relativo(arg entrada)
RAIZ = Aprox. de la solucin (arg salida)
ICLAVE = Clave de xito (arg salida)
0 = xito
-1 = no se puede proceder (f(x) de
igual signo en a y b)
0 = iteraciones excedidas
---------------------------------------------------
Bloque de declaracin de tipo
---------------------------------------------------
IMPLICIT NONE
INTEGER NMAX,ICLAVE
DOUBLE PRECISION F,XA,XB,TOL,RAIZ
---------------------------------------------------
INTEGER I
DOUBLE PRECISION A, B, FA, FB
DOUBLE PRECISION SIGNFA, FR, RAIZ0
---------------------------------------------------
Bloque de procesamiento
--------------------------------------------------ICLAVE = 0
A = XA
B = XB
FA = F(A)
FB = F(B)
SIGNFA = SIGN(1.0D0,FA)
IF (SIGNFA*FB.GT.0D0) THEN
ICLAVE = -1
RETURN
ENDIF
RAIZ0 = 0D+0
DO I=1,NMAX
RAIZ = A - FA*(B-A)/(FB-FA)
IF (ABS((RAIZ-RAIZ0)/RAIZ).LT.TOL) RETURN
FR = F(RAIZ)
IF ((SIGNFA*FR).GT.0D0) THEN
A = RAIZ
FA = FR

16
ELSE
B = RAIZ
FB = FR
ENDIF
RAIZ0 = RAIZ
ENDDO
ICLAVE = 1
RETURN
END
---------------------------------------------------

*Mtodos consultados y revisados en las pginas escritas en la Bibliografa. *


BIBLIOGRAFIA
https://es.wikipedia.org/wiki/M%C3%A9todo_de_bisecci%C3%B3n

http://anyp.fcaglp.unlp.edu.ar/practicas/f90-raices.pdf

https://es.wikipedia.org/wiki/M%C3%A9todo_del_punto_fijo

http://anyp.fcaglp.unlp.edu.ar/practicas/f90-raices.pdf

https://www.uv.es/~diaz/mn/node21.html

https://blogdelingeniero1.wordpress.com/2013/04/12/matlab-metodo-de-la-posicion-falsa/

17

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