metodosnumericos_raices

15

Click here to load reader

Upload: laura-becerra

Post on 04-Jul-2015

67 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: metodosNumericos_Raices

Universidad Industrial de Santander Escuela de Física. Métodos Numéricos y probabilidad Proyecto I Grupo C2

Nombre: Laura Marcela Becerra Bayona Código: 2082692

Profesor Illia Mikhailov Fecha: 05/11/2010

1. Tarea N 1:

Consideremos la ecuación f(x) = g(x, p) con un parámetro p y denotaremos las raíces de esta ecuación dentrodel intervalo (a, b) positivas de esta ecuación x(i) = 1, 2, 3, ..., n, donde n es el número de las raíces.a)Utilizando el método de bisección encuéntrese el número n de las raíces y valores de todas raíces con laprecisión ε = 10−8 para valor del parámetro p = 1b)Presente el grá�co del número de las raíces n en función del parámetro p para po < p < pfc)Encuéntrese la raíz número n − 1 utilizando los métodos de bisección y Newton con la misma precisiónε = 10−8 y compárese la cantidad de iteraciones que requieren estos métodos para lograr la precisión sugerida

f(x) = pe−x/p, g(x) = sen2(x), a = 0, b = 0, po = 0,5, pf = 5,0

1.1. Marco Teórico

A continuación se examinarand dos métedos, el método de bisección y el método de Newton, para encontrarlas raices reales de una función general f(x)

Método de bisección

El método de bisección es un algoritmo de búsqueda de raíces que trabaja dividiendo el intervalo a la mitady seleccionando el subintervalo que tiene la raíz. De antemano se debe estar seguro de la continuidad de lafunción en el intervalo donde se desea encontrar la raiz. Para describir el procedimiento se considera el casosimple en el cual la función f(x) tiene solo una raiz en el intervalo [a,b] primero se parte el intervalo en su

punto medio, xm = (a+b)2 y se computan f(xm) ∗ f(b); si el producto es negativo entonces la raiz esta el

intervalo xm < x < b, pues la función f(x) cambia de signo en él y cruza el eje de las x, por el contrario si elprodcuto es positivo la raiz de la función esta en el intervalo a < x < xm. Finalmete seleccionando el intervaloque contiene la raiz se bisecciona de nuevo y se repite el procedimiento, lo cual se realiza hasta que la raiz esencontrada con la precisión deseada.

En el caso en que la función f(x) tenga más de una raiz en el intervalo [a, b], se divide el intervalo para aislarla raiz que se quiere determinar, lo cual se realiza a partir de un conocimiento previo del comportamientode la función, el cual se puede obtener realizando la g¯a�ca de la función. El método de bisección no localizaaquellos puntos donde la función es tangente al eje de las x, es decir, toca el eje pero no lo cruza, lo cualresulta en una raiz múltiple.

Método de Newton

El método de Newton-Raphson es un método abierto, en el sentido de que su convergencia global no estágarantizada. La única manera de alcanzar la convergencia es seleccionar un valor inicial lo su�cientemente

1

Page 2: metodosNumericos_Raices

cercano a la raíz buscada, denominado punto de arranque o valor supuesto. La relativa cercanía del puntoinicial a la raíz depende mucho de la naturaleza de la propia función; si ésta presenta múltiples puntos dein�exión o pendientes grandes en el entorno de la raíz, entonces las probabilidades de que el algoritmo diverjaaumentan, lo cual exige seleccionar un valor supuesto cercano a la raíz. Una vez se ha hecho esto, el métodolinealiza la función por la recta tangente en ese valor supuesto. La abscisa en el origen de dicha recta será,según el método, una mejor aproximación de la raíz que el valor anterior. Se realizarán sucesivas iteracioneshasta que el método haya convergido lo su�ciente.

Es decir: si f(x) es una función derivable de�nida en el intervalo real [a, b]. Se empienza con un valor inicialx0 y se de�ne para cada número natural n

xn+1 = xn −f(xn)

f ′(xn)

donde n denota el valor obtenido en la enésima iteración y n + 1 indica el valor a ser encontrado en la(n+ 1)-ésisma iteración.

1.2. ALGORITMOS

Todos los algoritmos que se describen a continuación fueron escritos en Fortran 95 y compilados con gfortran.Los programas utilizados para la realización del proyecto se adjuntan al �nal del documento, el programa No.1corresponde al método de bisección y con programa No.2 se realiza una comparación entre el método deNewton y bisección .

Método de bisección: Este método encuentra todas la raices de la función F (x) = 0 en el intervalo [a, b]con una tolerancia eps, las cuales las organiza en un vector raiz():Desde el programa principal se llama una subrutina, la cual va a recorrer todo el intervalo [a, b] en pasos delongitud hraiz, buscando los intervalos, [a + n ∗ hraiz, a + (n + 1) ∗ hraiz], donde la función toma signosopuestos en los extremos, lo cual garantiza que existe al menos una raiz en dicho intervalo, de tal forma quecon la función Raiz1 se busca la respectiva raiz de la función con la presición eps. Todas las raices de la funciónson guardadas en el vector raiz() y cada vez que se encuntra un intervalo con la condición requerida se suma1 a la variable nraiz.

Subrutina del método de bisección:

Parámetros de entrada: a, b, eps, hraiz, fun (donde fun es una función que calcula el vallor de F (x))Parámetros de salida: raiz(),nraiz

1. Declaración de variables: xl←a, xr←a + hraiz, �←fun(xl), fr←fun(xr), nraiz←0.0

2. if(fr*�<0.0) then nraiz←nraiz + 1.0, xraiz(nraiz)←Raiz1*(xl,xr,eps) end if

3. xl←xr, �←fr, xr←xl + hraiz, fr←fun(xr)

4. if (xr<b) then go to 2 end if

función Raiz1

Parámetros de entrada: xr,xl,eps,funParámetro de salida: raiz

El diagrama de �ujo de la función se muestra en la �g.1

2

Page 3: metodosNumericos_Raices

Figura 1: Diagrama de �ujo: Método de bisección

Método de Newton: Este método encuentra una raiz de la función F (x) = 0 en el intervalo [a, b] con unatolerancia eps:Se utilizan las funciones fun, dfun, ddfun, que corresponden a la función, a la derivada de la función y a lasegunda derivada de la función respectivamente.

Parámetros de entrada: a,eps,fun,dfun,ddfunParámetros de salida: raiz

El digrama de �ujo del método de Newton se muestra en la �g.3

Figura 2: Diagrama de �ujo: Método de Newton

3

Page 4: metodosNumericos_Raices

1.3. RESULTADOS Y DISCUSIÓN

La función F (x, p) con la cual se va a trabajar es:

F (x, p) = pe−x/p − sen2(x)

Caso p = 1Con el �n de tener una idea del comportamiento de la función, F (x, 1), en el intervalo [a, b], se realizó surespectiva grá�ca, la cual se presenta en la �g.3. En dicha g¯a�ca se puede observar como el factor e−x sehace rapidamente << 1, de tal manera que la función tiende al seno cuadrado de x. También se realizaron lasgrá�cas de f(x) y g(x, 1) (�g.4), en la cual se puede observar las raices de la función F (x, 1) que correspondena los puntos donde las funciones de intersectan.

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

0 5 10 15 20

f(x)

x

Grafica de la funcion

Figura 3: Grá�ca de la función F (x, p)Figura 4: Grá�ca de la función f(x)(roja) y

g(x, 1)(verde)

Con el método de bisección se hallaron las n raices de la función F (x, 1), de tal manera que de acuerdo alas condiciones sugeridas y con base en los anteriores grá�cos se establecieron los parametros de entrada, loscuales son:

a← 0,0 b← 20,0 eps← 10−8 hraiz ← 0,01

De tal forma que después de correr el programa No.1 , la función en el intervalo dado tiene nueve (n = 9)raices, las cuales son:

Raices de la función para p= 1.0

1 0.75526571

2 2.90547593

3 3.33176102

4 6.23899148

5 6.32550698

6 9.41575394

7 9.43372133

Caso p 6= 1

4

Page 5: metodosNumericos_Raices

A apartir de la función F (x, p) se puede concluir que cuando p < 1 el factor p∗e−x/p decrece más rápidamente,de tal manera que el número de raices de la función se ve disminuido; por otro lado cuando p > 1, el mencionadofactor decrece más lentamente, y por lo tanto el número de raices se hace mayor, tal que aunque la funciónF (x, p) va a tender al seno cuadrado de x, lo va a hacer para valores mayores de x a medida que el valor de paumenta. Igualmete se realizaron las grá�cas de f(x) y g(x, p) para determinados valores representativos de pcon el �n de observar el comportamiento del número de raices de la función(�g.5).

Figura 5: Grá�ca de la función f(x)(roja) y g(x, 1)(verde) para diferentes valores de p

Después de correr el programa No.1 , pero en esta ocasión utilizando el archivo �gra�car.dat�, en el cualse imprimieron los valores del numero de raices(nraiz) con su respectivo valor de p, gra�cando los puntosobtenidos a través de gnuplot, obteniendo la grá�ca de la �g.6. En dicha g¯a�ca se observa que a cuanto mayores el valor de p, mayor es el número de las raices de la función; sin embargo es necesario aclarar que auque enla gra�ca el número de raices aumenta dentro del intervalo y luego disminuye es debido a que las demás raicesde la función se encuentran fuera del intervalo en el cual se esta trabajando

0

5

10

15

20

0 1 2 3 4 5

n [num

ero

de r

aic

es]

p

Numero de raices en funcion del parametro p

Figura 6: Grá�ca del número de raices en función del parámetro p para F (x, p)

También el programa imprime en el archivo állraiz.dat', los valores de las raices de la funcion F (x, p), de talmanera que a continuación se presentan algunos valores representativos, notando que a medida que el valorde parámetro p a aumente, el valor de la primera raiz es mayor, es decir, que el punto donde la función cruzpor primera vez el eje x en el intervalo [0, 20] se va corriendo a la derecha a medida que p es más grande:

5

Page 6: metodosNumericos_Raices

Raices de la función para p= 0.50 Raices de la función para p= 0.80

1 0.46181632 1 0.64200430

2 3.11005143 2 3.00437180

3 3.17126062 3 3.25855667

4 6.26536416

5 6.30061807

Raices de la función para p= 2.0 Raices de la función para p= 3.0

1 1.42750216 1 4.18213057

2 2.18022815 2 5.52159749

3 3.73160029 3 6.86726437

4 5.95869120 4 9.03006747

5 6.56100564 5 9.77152436

6 9.28554110 6 12.34314345

7 9.55489425 7 12.77389870

8 12.50426064 8 15.57849433

9 12.62660731 9 15.83204669

10 15.67989936 10 18.77368195

11 15.73563874 11 18.92355468

12 18.83681072

13 18.86222040

Raices de la función para p= 4.0 Raices de la función para p= 4.9

1 7.22786902 1 7.80100897

2 8.68307598 2 8.10871922

3 10.03214997 3 10.30857613

4 12.11062509 4 11.84419561

5 12.97262700 5 13.18108392

6 15.41237720 6 15.22051808

7 15.98266284 7 16.14810900

8 18.65406336 8 18.50807019

9 19.03582897 9 19.16798930

Finalmente con el �n de comparar el método de Newton con el método de bisección, se econtró la raiz n− 1de la función F (x, 1) a través de los dos métodos, comparando el número de iteraciones que realizan así comola precisión del valor de la raiz encontrado.

Como ya se encontraron las raices con el método de bisección, a partir de estos resultados se establecen losparametros de entrada para la raiz n− 1:

a← 9,41 b← 9,42 eps← 10−8

Y utilizando el programa No.2, el cual crea un archivo .dat, donde imprime el valor de x, f(x) y el error paracada una de las iteraciones realizada por cada método respectivamente, lo cual se presenta a continuación:

6

Page 7: metodosNumericos_Raices

Metodo de Biseccion Metodo de Newton

iteración x f(x) error iteración x f(x) error

========== === ====== ====== ========== === ====== ======

1 9.414999962 -0.141D-04 0.500D-02 1 9.41385117 -0.378D-04 0.615D-02

2 9.417500019 0.283D-04 0.250D-02 2 9.41558766 -0.301D-05 0.174D-02

3 9.416249990 0.867D-05 0.625D-03 3 9.41575241 -0.271D-07 0.165D-03

4 9.415624976 -0.233D-05 0.313D-03 4 9.41575392 -0.228D-11 0.151D-05

5 9.415937483 0.326D-05 0.313D-03 5 9.41575392 0.218D-17 0.127D-09

6 9.415781230 0.490D-06 0.781D-04

7 9.415703103 -0.916D-06 0.391D-04 el numero de iteraciones fueron: 5

8 9.415742166 -0.211D-06 0.391D-04 la raiz n-1 de la funcion es: 9.41575392

9 9.415761698 0.140D-06 0.195D-04

10 9.415751932 -0.358D-07 0.488D-05

11 9.415756815 0.520D-07 0.488D-05

12 9.415754374 0.810D-08 0.122D-05

13 9.415753153 -0.138D-07 0.610D-06

14 9.415753763 -0.287D-08 0.610D-06

15 9.415754068 0.261D-08 0.305D-06

16 9.415753916 -0.126D-09 0.763D-07

17 9.415753992 0.124D-08 0.763D-07

el numero de iteraciones fueron: 17

la raiz n-1 de la funcion es: 9.415754

Al comparar los métodos de bisección y de Newton, se peude decir el método de Newton es mucho más efectivoy rápido pues este llegar a la raiz esperada realizando un menor número de iteraciones (solo 5) y con una mejorpresición, ya que el valor de F (x, 1) en la raiz, es más próximo a cero que el valor de la función que correspondea la raiz hallada con el método de bisección.

2. Tarea N 2:

Una de las características importantes para el movimiento de una partícula en un campo central con el potencial

V (r) son los puntos de retorno que se encuentran como las raíces de la ecuación algebraica L2

2mr2 + V (r) = E, donde m es la masa de la partícula, L el momento angular y E es la energía de la partícula. Los dos últimosparámetros son las integrales de movimiento y se de�nen a través de las condiciones iniciales. Por ejemplo,para el problema de Kepler, V (r) = α

r esta ecuación puede tener un punto de retorno (trayectorias hiperbólicao parabólica) o dos (trayectoria elíptica). En el caso de los potenciales diferentes de Kepler las trayectoriaspueden ser más complicadas con el nímero de los puntos de retorno superiores a dos. En los problemas siguientesusando las unidades adimensionales, la ecuación algebraica para los puntos de retorno (r(i), i = 1, 2, 3, ..., n))se representa en la forma:

Veff =1

r2+ V (r) = E

donde E es la energía adimensional de la partícula.

Presente el grá�co Veff (r)

Utilizando el programa de la tarea N1 encuéntrese el número de los puntos de retorno en función de laenergía

Descríbase el tipo de trayectoria de la partícula para cada caso particular de la energía,

7

Page 8: metodosNumericos_Raices

La ecuación a analizar correspondiente al potencial efectivo es:

Veff =1

r2+ ((r + 2)2 − 4)2

2.1. RESULTADOS Y DISCUSIÓN

La grá�ca del potencial efectivo (Veff ) se presenta en la �g.7, la cual se realizó siguiendo el procedimientodescrito anteriormente.

0

5

10

15

20

25

0.5 1 1.5 2 2.5 3 3.5 4 4.5 5

Ve

ff

r

Grafica del potencial efectivo

E1

E2

E3

E4

E5

Veff

Figura 7: Potencial efectivo, Veff

En la �g.7 se observa que el potencial efectivo tiene dos mínimos y un máximo, que pueden ser encontradosutilizando el criterio de la primera derivada; por tanto la derivada del potencial efectivo es:

dVeffdr

=−2

r3 + 4r(r − 2)(r − 4)

Los puntos dondedVeff

dr = 0 corresponden a máximos y mínimos relativos de Veff , los cuales fueron de-terminados a partir del método de bisección, utilizando el programa No.1 con los siguientes parametros deentrada:

a← 0,2 b← 5,0 eps← 10−8 hraiz ← 1,0

Maximos y minimos del potencial efectivo

1 0.56424371

2 1.98399271

3 4.00097513

Y comparando los puntos con la g¯a�ca se concluye que r = 0,564 y r = 4,009 correponden a los mínimos dela función, y r = 4,00 corresponde al máximo de la función

La ecuación Veff = E determina los límites del movimiento de una partícula en dicho potencial, de tal maneraque en los valores de r que la satifacen, la velocidad radial se hace cero, indicando los puntos de retornode la trayectoria, es decir, si una partícula se mueve en este potencial, en dichos puntos esta comienza aretroceder (r(t) comienzaa decrecer en vez de incrementarse o viceversa). Por lo tanto utilizando el método debisección (programa No.1) se encontraron los puntos de retorno, que corresponden a las raices de la ecuación:

8

Page 9: metodosNumericos_Raices

Veff − E = 0, para diferentes valores de E dentro del intervalo [0, 25], gra�cando el número de puntos deretorno en función del valor de la energía correspondiente (�g.8). Igualmente se presentan los valores de dichospuntos (las raices de la función).

Los parametros de entrada del programa. No.1 son:

a← 0,2 b← 5,0 eps← 10−8 hraiz ← 0,2

Además se modi�co la función fun, reemplazando en su lugar el siguiente código:real*8 function fun(x,E)

real*8,Intent(in) :: x,E

fun=1/x**2.0+((x-2.0)**2.0-4.0)**2.0-E

return

end function fun

Energía (E) r1 r2 r3 r4

1 3.74251514 4.22971989

5 3.33570919 4.49498975

6.89 0.56424371 3.18048234 4.57220350

7 0.512941653 0.62217017 3.17179387 4.57618162

16 0.25759280 1.80348618 2.16367815 4.82747814

16.25 0.25534130 1.98399271 4.83302796

17 0.24900923 4.87013395

Cuadro 1: Valor de los puntos de retorno para determinados valores de la energía

0

1

2

3

4

5

0 5 10 15 20 25

n [num

ero

de p

unto

s d

e r

eto

rno]

E

Puntos de retorno en funcion de la energia

Figura 8: Puntos de retorno en función del valor de la energía

9

Page 10: metodosNumericos_Raices

A continuación se analizá la trayetoria de una partícula para cincos valores representativos de la energía, E,los cuales se presentan en la �g.7:

Para E = E1 la trayectoria de la particula tiene dos puntos de retorno, es decir que tiene dos puntoslímites (rmaxyrmin). El movimiento es �nito y va a estar limitado a rmax < r < rmin. Observandola �g.7, se deduce que esto ocurre para energías tales que 0 < E < 6,2, por ejemplo para E = 5, elmovimiento se encuentra con�nada en la región 3,358 < r < 4,495.

E = E2 es un caso particular pues existen tres puntos de retorno por lo tanto la partícula puede tener dostrayectorias posibles. En el primer punto la partícula realizaría una trayectoria circular pues r = rmax =rmin. En los siguientes dos puntos la particula realizaría la trayectoria descrita anteriormente.Este casose da únicamente cuando la energía es E = 6,89, donde um punto de retorno (r = 0,564) constituye unmínimo del potencial efectivo

Para E = E3, existen cuatro puntos de retorno, los cuales forman dos pozos de potencial, en los cualessi las partícula se mueve en ellos realizaría la trayecrotia descrita en el primer numeral. Cabe resaltarque la particula no podrá saltar de un pozo de portencial a otro pues para ello requiere valores depotencial más altos que la energía total, es decir, si E = 7, el movimiento esta con�nado en las regiones0,513 < r < 1,803 o en 3,172 < r < 4,576 y no podrá saltar de una región a la otra. Igualmete estoocurre para valores de la enegía tales que 6,89 < E < 16,25

Para E = E4 exiten nuevamente tres puntos de retorno. En este caso la trayectoria de la partículava a estar limitada en una región entre rmin < r < rmax, es decir entre los puntos de retorno que seencuentran en los extremos. Sin embargo cuando la particula pase por el punto de retorno de la mitadesta podrá devolverse o podrá seguir para invertir su movimiento en el siguiente puntos de retorno. Estecaso se da únicamente cuando la energía es E = 16,25, dodne el punto de retorno de retorno donde unapartícula puede seguir su movimiento o invertirlo correponse al máximo del potencial efectivo.

�nalmete para E = E5 exiten dos puntos de inversión. El moviento sera igual que el descrito en el primernumeral. Esto ocurre para energías E > 16,25

Debe aclararce que aunque la partícula en dicho potencial realizan trayectoria �nitas en la mayoría de loscasos, estas no son necesariamente cerradas. Además la particula no pueden estar en posiciones cuyo portencialefectivo sea mayor que la energía ya que esto violaría la ley de la conservación de la energía.

Referencias

[1] Hornbeck,Robert W., �Numerical methods� Editorial: Prentices Hall, New Jersey, 1975, Vol.1

[2] Landau,Lifshtz, �Mechanics� Editorial: Pergamon Press,Oxford,London,1960. Vol 1

3. Anexos

Programa No.1: Método de bisección

Program Met_biseccion

implicit real*8 (a-h,o-z)

parameter (n=100)

dimension xraiz(n)

10

Page 11: metodosNumericos_Raices

external fun

open(1,file='allraiz.dat',status='unknown')

open(2,file='graficar.dat',status='unknown')

c Generación de puntos para realizar la gráfica de la función

open(3,file='puntos.dat',status='unknown')

d=0.0

do while(d<20.0)

y=exp(-d)-sin(d)**2

write(3,'(f5.2,x,f8.5)') d,y

d=d+0.1

end do

close(3)

c Declaración de la variables

nraiz=0.0

a=0.0

b=20.0

eps=10.0d-8

hraiz=0.01

p=0.5

c Llamada a la subrutina allraiz para cada valor de p

do while(p<=5.0)

write(1,'(A29,x,g8.2)') 'Raices de la función para p=',p

call allraiz(a,b,fun,p,eps,hraiz,nraiz,xraiz)

c Impresión de las raices en el archivo allraiz.dat

do i=1,nraiz

write(1,11) i, xraiz(i)

end do

c Impresión del número de raices en funcion del pa¯ametro p en el archivo

c graficar.dat

write(2,'(f4.2,x,I2)') p,nraiz

write(1,*)

p=p+0.1

end do

11 format(4x,i2,2x,f12.8)

close(1)

close(2)

stop

end program Met_biseccion

c Función a la cual se le van a encontrar las raices

real*8 function fun(x,p)

real*8,Intent(in) :: x,p

fun=p*exp(-x/p)-(sin(x))**2

return

end function fun

c La subrutina allraiz cubre el intervalo [a,b] en pasos de longitud de hraiz,

c buscando los intervalos [a+n*hraiz,a+(n+1)*hraiz] en cuyo extremos la función

c toma signo distintos

Subroutine allraiz(a,b,fun,p,eps,hraiz,nraiz,xraiz)

11

Page 12: metodosNumericos_Raices

parameter (n=100)

implicit real*8 (a-h,o-z)

dimension xraiz(n)

external fun

h=hraiz

xl=a

xr=a+h

fl=fun(xl,p)

fr=fun(xr,p)

nraiz=0

10 if(fl*fr.lt.0.0) then

nraiz=nraiz+1

xraiz(nraiz)=Raiz1(fun,xl,xr,p,eps)

end if

xl=xr

fl=fr

xr=xl+h

fr=fun(xr,p)

if(xr.lt.b) go to 10

return

end subroutine allraiz

c La función Raiz1 busca la solución de la ecuación f(x)=0 en los intervalos objetivo

c de la subrutina allraiz (observar diagrama de flujo del método de bisección)

real*8 function Raiz1(func,a,b,p,eps)

implicit real*8 (a-h,o-z)

xi=a

xd=b

10 fd=fun(xd,p)

fi=fun(xi,p)

if(fd*fi<0) then

if((xd-xi)<2.0*eps) then

x=(xi+xd)/2.0

else

temp=xi

xi=(xd+xi)/2.0

go to 10

end if

else

xd=xi

xi=temp

xi=(xd+xi)/2.0

go to 10

end if

Raiz1=x

return

end function Raiz1

Programa N.2: Comparación método bisección y método de Newton:

Program Met_biseccion

implicit real*8 (a-h,o-z)

external fun,dfun,ddfun

c Declaración de los parametros de entrada

12

Page 13: metodosNumericos_Raices

a=9.41

b=9.42

eps=10.0d-8

c Impresión de la raiz hallada con el método de bisección.

open(1,file='union.dat',status='unknown')

raiz=Raiz1(fun,a,b,eps)

write(*,*)'Metodo de biseccion:', raiz

c Impresión de la raiz hallada con el método de Newton.

oraiz=Raiz2(fun,dfun,ddfun,b,eps)

write(*,*) 'Metodo de Newton:',oraiz

close(1)

stop

end program Met_biseccion

c Función a la cual se le van a hallar las raices

real*8 function fun(x)

real*8,Intent(in) :: x

fun=exp(-x)-(sin(x))**2

return

end function fun

c Derivada de la función

Real*8 function dfun(x)

real*8,intent(in)::x

dfun=-exp(-x)-2*sin(x)*cos(x)

end function dfun

c Segunda derivada de la función

Real*8 function ddfun(x)

real*8,intent(in)::x

ddfun=-exp(-x)-2*(cos(x)**2.0-sin(x)**2.0)

end function ddfun

c La function Raiz1 encuntra la raiz en el intervalo [a,b] utilizando el método de bisección.

real*8 function Raiz1(func,a,b,eps)

implicit real*8 (a-h,o-z)

iter1=0.0

xi=a

xd=b

write(1,*) 'Metodo de Biseccion'

write(1,'(2x,(A10,5x),(A6,9x),2(A6,6x))') 'iteración', 'x','f(x)','error'

write(1,'(2x,(A10,5x),(A6,9x),2(A6,6x))') '==========', '===', '======','========'

12 fd=fun(xd)

fi=fun(xi)

if(fd*fi<0) then

iter1=iter1+1

write(1,11) iter1,(xi+xd)/2.0,fun((xi+xd)/2.0),(xd-xi)/2

if((xd-xi)<2.0*eps) then

x=(xi+xd)/2.0

else

13

Page 14: metodosNumericos_Raices

temp=xi

xi=(xd+xi)/2.0

go to 12

end if

else

xd=xi

xi=temp

xi=(xd+xi)/2.0

iter1=iter1+1

write(1,11) iter1,xi,fun(xi),(xd-xi)/2

go to 12

end if

Raiz1=x

write(1,*)

write(1,'(A,x,g8.1)') 'el numero de iteraciones fueron:',iter1

write(1,'(A,x,f8.6)') 'la raiz n-1 de la funcion es:',Raiz1

11 format(x,(g8.1,5x),(f12.9,3x),2(1d10.3,3x))

return

end function Raiz1

c La función Raiz2 halla la raiz en el intervalo [a,b] con el método de Newton

Real*8 function Raiz2(func,dfunc,ddfunc,a,eps)

implicit real*8(a-h,o-z)

iter=0.0

write(1,*)

write(1,*) '----------------------------------------------------------------'

write(1,*) 'Metodo de Newton'

write(1,'(2x,(A10,5x),(A6,9x),2(A6,6x))') 'iteración', 'x','f(x)','error'

write(1,'(2x,(A10,5x),(A6,9x),2(A6,6x))') '==========', '===', '======','========'

xo=a

if(fun(x)*ddfun(x)>0) then

print*, 'Cambie el punto inicial'

stop

end if

14 f=fun(xo)

df=dfun(xo)

iter=iter+1

x=xo-f/df

error=abs(x-xo)

c En el archivo union.dat se imprime el valor x, f(x9 y el error para cada iteración

c realizada

write(1,11) iter,x,fun(x),error

if(abs(error)<eps) then

Raiz2=x

else

xo=x

go to 14

end if

write(1,*)

write(1,'(A,x,g8.1)') 'el numero de iteraciones fueron:',iter

write(1,'(A,x,f12.8)') 'la raiz n-1 de la funcion es:',Raiz2

11 format(x,(g8.1,5x),(f12.8,3x),2(1d10.3,3x))

14

Page 15: metodosNumericos_Raices

return

end function Raiz2

15