viernes, 25 de marzo de 2011

Método de la Bisección

Método sencillo para calcular las raíces de funciones de una variable que se basa en el teorema del valor intermedio el cual establece que toda función continua f es un intervalo cerrado [a,b]. Toma todos los valores que se hallan entre f(a) y f(b). Esto es que todo valor entre f(a) y f(b) es la imagen de al menos un valor en el intervalo [a,b]. En caso de que f(a) y f(b) tengan signos opuestos, el valor cero sería un valor intermedio entre f(a) y f(b), por lo que con certeza existe un p en [a,b] que cumple f(p)=0. De esta forma, se asegura la existencia de al menos una solución de la ecuación f(a)=0.

















Programa principal:

program main
use numerico
use funciones
implicit none
real::Xi,Xd,Xm,epsilon
write(*,*)'elige la tolerancia'
read(*,*)epsilon
write(*,*)'Tol:',epsilon
write(*,*)'elige el intervalo'
read(*,*)Xi
read(*,*)Xd
write(*,*)'el intervalo es:',Xi,',',Xd
call biseccion(f1,Xi,Xd,Xm,epsilon)
write(*,*)'el valor de la raiz es:'
write(*,*)Xm

end program
Module Numérico:

module numerico
contains
subroutine biseccion(f,a,b,Xm,Tol)
interface
function f(x)
real,intent(in)::x
real::f
end function
end interface
real,intent(inout)::a,b,Tol
real,intent(out)::Xm
real::error
real::er

do
  Xm=((a+b)/2.0)
  S=((f(a))*(f(Xm)))
error=((b-a)/b)
er=(abs(error))

 
   If(S<0)then
   b=Xm
   endif
   If(S>0)then
  a=Xm
     endif    
   If(er<Tol)exit
  
end do
end subroutine biseccion
end module numerico
Module funciones:

module funciones
contains

function f1(x)
real,intent(in)::x
real::f1
f1=((x**3)+(4*(x**2))-10)

end function


end module funciones



3 comentarios:

  1. Respuestas
    1. por que los modulos deben de ir antes del programa, solo corta la parte del programa y pegala al final del " end module funciones

      Eliminar
  2. me puedes mandar el ejecutable porfavor, ya que no me queda xfa, mi correo es : smendozag481@gmail.com
    te lo agradecere mucho

    ResponderEliminar