metodosNumericos_Raices
Click here to load reader
-
Upload
laura-becerra -
Category
Documents
-
view
66 -
download
0
Transcript of 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
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
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
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
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
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
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
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
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
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
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
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
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
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
return
end function Raiz2
15