Método de Newton para hallar las raíces de una función. 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 suficientemente cercano a la raíz buscada.
Nótese que el método descrito es de aplicación exclusiva para funciones de una sola variable con forma analítica o implícita cognoscible.
Programa principal:
Program main
use numerico
use funciones
implicit none
real::epsilon,X,Xm
write(*,*)'elige una tolerancia de error'
read(*,*)epsilon
write(*,*)'elige el punto de comienzo'
read(*,*)X
call newton(f1,f2,X,Xm,epsilon)
write(*,*)'el valor de la raiz es:',Xm
end program
Module Numerico:
module numerico
contains
subroutine newton(f1,f2,Xo,Xm,Tol)
interface
function f1(x)
real,intent(in)::x
real::f1
end function
function f2(x)
real,intent(in)::x
real::f2
end function
end interface
real,intent(inout)::Xo,Tol
real,intent(out)::Xm
real::error,er
do
Xm=((Xo)-(f1(Xo)/f2(Xo)))
error=((Xo-Xm)/(Xo))
er=(abs(error))
If(er<Tol)exit
Xo=Xm
end do
end subroutine newton
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
function f2(x)
real,intent(in)::x
real::f2
f2=(3*(x**2))+(8*(x))
end function
end module funciones
Nótese que el método descrito es de aplicación exclusiva para funciones de una sola variable con forma analítica o implícita cognoscible.
Programa principal:
Program main
use numerico
use funciones
implicit none
real::epsilon,X,Xm
write(*,*)'elige una tolerancia de error'
read(*,*)epsilon
write(*,*)'elige el punto de comienzo'
read(*,*)X
call newton(f1,f2,X,Xm,epsilon)
write(*,*)'el valor de la raiz es:',Xm
end program
Module Numerico:
module numerico
contains
subroutine newton(f1,f2,Xo,Xm,Tol)
interface
function f1(x)
real,intent(in)::x
real::f1
end function
function f2(x)
real,intent(in)::x
real::f2
end function
end interface
real,intent(inout)::Xo,Tol
real,intent(out)::Xm
real::error,er
do
Xm=((Xo)-(f1(Xo)/f2(Xo)))
error=((Xo-Xm)/(Xo))
er=(abs(error))
If(er<Tol)exit
Xo=Xm
end do
end subroutine newton
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
function f2(x)
real,intent(in)::x
real::f2
f2=(3*(x**2))+(8*(x))
end function
end module funciones
mi hermano esto no correee bueno ni gatea que sugieres dice que no encuentra el modulo funciones
ResponderEliminar