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
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
porque no funciona???!!!
ResponderEliminarpor que los modulos deben de ir antes del programa, solo corta la parte del programa y pegala al final del " end module funciones
Eliminarme puedes mandar el ejecutable porfavor, ya que no me queda xfa, mi correo es : smendozag481@gmail.com
ResponderEliminarte lo agradecere mucho