En métodos numéricos (y en programación en general) ocurre que hay ciertas instrucciones de tu código que se deben ejecutar varias veces en distintas partes de tu programa, para evitar tener que escribir ese fragmento de código de manera repetida se usa la programación modular que logra "encapsular" dichas instrucciones para ser llamadas las veces que sean requeridas en donde sean requeridas evitando el gasto computacional.
Las funciones en programación se parecen mucho entre sí y tienen cierto análogo con las funciones matemáticas de toda la vida.
En Fortran las funciones toman ciertos parámetros como datos y devuelven un dato que sería la función evaluada en dichos parámetros.
Para que quede más claro, un análogo con funciones matemáticas:
Sea f(x) = 2x una función matemática. Lo que quiere decir esta función es que le ingresas un valor que denotamos por x y la función evalúa dicho valor y devuelve el doble del mismo, ¿sencillo verdad?. Algo que se debe aclarar, para comprender mejor las funciones en Fortran, es que f es la función y f(x) es la representación del doble de algún valor x que ingresamos. Esto quiere decir que si x=5, entonces f(x)=10, por muy simple que parezca, esto llega a confundir al momento de programar así que interioricen este concepto pues ese x puede reemplazarse por cualquier letra, ya que viene a ser una variable muda.
También hay funciones que aceptan varias variables de entrada, por ejemplo f(x,y,z)=2x+3y-z, donde los parámetros a ingresar ahora son 3, pero la salida sigue siendo un único valor que depende de los valores de (x,y,z), entonces si x=3, y=0, z=1 --> f(x, y, z) = 5.
La lógica detrás de las funciones en programación es similar a la de las funciones matemáticas, con algunas diferencias:
Los parámetros o datos de entrada pueden ser de alguno de los tipos de variable en Fortran (caracteres, enteros, reales o booleanos) al igual la función, no necesariamente deben ser números como en una función matemática.
Además de tener un resultado único que se determina por las operaciones de las variables, las funciones en Fortran (y en programación en general) pueden ejecutar otras instrucciones como imprimir texto, guardar datos en algún archivo enterno, etc.
Las funciones siguen las mismas reglas de declaración que cualquier variable, no necesariamente deben ser una sola letra como las funciones matemáticas.
No es necesario asignarle un valor a la función, pero el programa arrojará un valor por defecto (esto punto lo veremos más adelante).
Dentro de las funciones se pueden ejecutar bucles y condicionales.
Las funciones se pueden declarar de dos maneras en Fortran:
Primera forma: Función fuera del programa principal
La sintaxis es de la forma:
program funciones
implicit none
tipo1 variables
tipo2 nombre_funcion
Instrucciones
end program
tipo2 function nombre_funcion(variables)
tipo1 variables
Instrucciones
end function
La función está definida fuera del programa principal, en este caso debajo de end program pero también puede estar arriba del programa principal. La función se declara como una variable agregando la palabra reservada function. Después de declarar la función se declaran las variables que usará la función, estas variables pueden ser los parámetros que se le ingresa a la función (por ejemplo, la x de f(x)), estas variables se les conoce como argumentos ficticios pues solo sirven para representar algún valor que será pasado posteriormente (como en las funciones matemáticas) o las demás variables que se usarán en las instrucciones. Además, se pueden indicar instrucciones, como asignarle el valor de la función en función de sus variables.
Las variables se conocen como mudas o ficticias ya que solo representan la operación que se hará con ellas, mas no un valor definido (como en las funciones matemáticas).
Representaremos las funciones matemáticas como ejemplos:
program funciones
implicit none
real a, f
a = 5.
print*,f(a)
end program
real function f(x)
real x
f = 2*x
end function
Como se ve, la variable en la función es diferente a la variable en el programa. A x se le denomina, como ya se mencionó, argumento ficticio, mientras que la variable a se denomina argumento verdadero, pues es el valor que en realidad es evaluado por la función. También se puede declarar la misma variable como argumento ficticio y argumento verdadero.
Forma 2: Función dentro del programa principal
Fortran tiene algunas funciones ya implementadas que no necesitan ser declaradas.
Algunas funciones implícitas son:
abs valor absoluto
min valor mínimo
max valor máximo
sqrt raíz cuadrada
sin seno
cos coseno
tan tangente
atan arco tangente
exp exponencial (natural)
log logaritmo (natural)