El Cálculo Numérico, o Análisis Numérico, como también se le denomina, es la
rama de las Matemáticas que estudia los métodos numéricos de resolución de
problemas, es decir, los métodos que permiten obtener una solución aproximada (a
veces exacta) del problema considerado tras realizar un número finito de
operaciones lógicas y algebraicas elementales. Los métodos numéricos son
imprescindibles para resolver aquellos problemas para los cuales no existen
métodos directos de resolución, o bien para aquellos otros en los que existe un
método directo pero no es viable, como ocurre con la regla de Cramer para la
resolución de sistemas lineales, que teóricamente es válida para resolver
cualquiera de ellos pero que en la práctica sólo es aplicable cuando la
dimensión es muy pequeña. El coste operacional de un
método es el número de operaciones que requiere su aplicación. Conocidos dicho
número y la velocidad de cálculo del ordenador, podemos saber el tiempo que
tardaría en ser resuelto. Por ejemplo, resolver un sistema lineal de orden poco
mayor que , con los
ordenadores actuales y aplicando la regla de Cramer, supondría más de un millón
de años, porque cuando el valor de un determinante de orden
se calcula como
determinantes de
orden
el número
de operaciones que hay que hacer es, aproximadamente, del orden de
, valor que crece muy
rápidamente cuando
aumenta.
Los métodos numéricos han sido utilizados desde la antigüedad en la búsqueda de soluciones aproximadas para los problemas procedentes de todas las ciencias y de las ingenierías. De hecho, hasta hace unos dos siglos la mayor parte de la matemática que se hacía era de tipo numérico y muchas de las demostraciones eran de tipo constructivo. No obstante, el nombre de Análisis Numérico aparece por primera vez en 1948, en California, donde se fundó el Instituto de Análisis Numérico, y su desarrollo ha sido paralelo al del ordenador, habiéndose producido un gran crecimiento en la segunda mitad del siglo XX, que continúa en la actualidad. Así pues, el Análisis Numérico tal y como se concibe hoy es una materia reciente. El ordenador es una herramienta imprescindible para esta disciplina, ya que los métodos numéricos requieren un gran número de cálculos y manipulaciones de datos.
Como hemos indicado, un método numérico es un procedimiento para aproximar la
solución de un problema. Un algoritmo es una descripción,
sin ambigüedad, de un proceso -o sucesión finita de pasos- que se puede seguir
para obtener la solución aproximada de dicho problema. Incluye desde la entrada
de datos hasta la impresión de resultados. Puede establecerse más de un
algoritmo para resolver un mismo problema. Un algoritmo se puede esquematizar
como sigue:
Los dos ejemplos extremadamente simples que siguen ilustran este esquema.
Ejemplo 1. Algoritmo para hallar la suma, , de
números reales,
Ejemplo 2. Algoritmo para calcular el producto, , de las componentes no
nulas de un vector
de
Los ordenadores operan en un sistema que no suele ser el decimal (base ), sino que lo hacen en
binario (base
) o en otro
cuya base sea una potencia de
(por ejemplo
). Sin embargo la
comunicación con el ordenador se hace siempre en base
. Los datos numéricos que
damos al ordenador están escritos en el sistema decimal y los resultados
numéricos que el ordenador devuelve también. Para pasar un número de la base
decimal a la binaria debemos dividir entre
y anotar el resto, volver a
dividir el cociente anterior entre
y anotar el resto, y así
sucesivamente hasta que el cociente sea cero. Los restos escritos en orden
inverso al que se han obtenido proporcionan la expresión del número en binario.
Por ejemplo, para escribir el número
del sistema decimal en el
sistema binario se realizan las operaciones que se indican a continuación:
Resto | ||||
![]() |
![]() |
![]() ![]() |
![]() |
![]() |
![]() |
![]() |
![]() ![]() |
![]() |
![]() |
![]() |
![]() |
![]() ![]() |
![]() |
![]() |
![]() |
![]() |
![]() ![]() |
![]() |
![]() |
![]() |
![]() |
![]() ![]() |
![]() |
![]() |
![]() |
![]() |
![]() ![]() |
![]() |
![]() |
Los restos dan como expresión binaria de
, lo que podemos
notar como
. El paso de la representación binario a decimal es muy fácil;
por ejemplo,
Números que tienen una representación finita en el sistema decimal pueden
tener una representación infinita en binario y viceversa. Por ejemplo, , donde la parte señalada se
repite periódicamente. Al introducir el número
en un ordenador que opere en
binario tiene que ser aproximado redondeándolo por defecto o por exceso a un
número cuya representación sea admisible por el ordenador (un número máquina, es decir, una cadena finita de ceros y unos).
La notación científica (o coma flotante) para representar los números en el
ordenador consta de signo, mantisa y
exponente; es decir, un número diferente de cero queda
representado de la forma donde la mantisa
es un número comprendido
entre
y
cuyo primer dígito es no
nulo;
es la base
(
cuando estamos en
el sistema decimal), que no es necesario dar; y
es el exponente. Pensemos,
por ejemplo, en
o
. Para
representar en binario el signo, la mantisa y el exponente de un número se usa
una cadena de bit
Un bit es un elemento físico
que admite dos estados que, por tanto, podemos hacer corresponder al
y al
Una cadena de bit se puede
hacer corresponder a una de
y
, y así obtener números en
binario. Con un bit también podemos representar los dos signos
y
. Matemáticamente, la cadena
de bit que se usa para representar a un número equivale a una sucesión finita de
ceros y unos. El primero de ellos se emplea para representar el signo del
número, la mayor parte de los siguientes para la mantisa y los restantes para el
exponente. No es imprescindible reservar una posición para el signo del
exponente, ya que podemos realizar una traslación interna de los exponentes y,
así, representar exponentes tanto positivos como negativos de, aproximadamente,
igual valor. Por ejemplo, con siete cifras en binario se puede conseguir
representar los números del
al
; restando a todos ellos
, tendríamos como
exponentes todos los números comprendidos entre
y
.
Una situación normal es disponer de bit, de los que uno se
dedica al signo,
a la mantisa y
al exponente. Los
exponenetes posibles irán desde el
hasta el
, de tal forma que, si se
contempla un desplazamiento automático de
, tendríamos como posibles
exponentes los valores enteros comprendidos entre
y
, y el rango de
números positivos con que podríamos trabajar va, aproximadamente, de
hasta
. La precisión es de
, es decir, de unas
cifras decimales. Si tras
una operación se obtiene un valor superior a
se produce
un desbordamiento (overflow). Un valor inferior a
es tomado
como
(underflow)
Sólo un conjunto finito de números puede ser representado en el ordenador de
forma exacta. En nuestro ejemplo, el siguiente a es
Cualquier otro número intermedio entre estos dos tiene que ser aproximado por
uno de ellos (redondeo). Si se aproxima por el más cercano se dice que el
redondeo es simétrico; si se cortan todos los dígitos de
la representación que sobrepasan la dimensión de la mantisa el redondeo es por
corte. Por ejemplo, en binario, con
dígitos, el redondeo
simétrico de
es
,
mientras que por corte es redondeado a
.
A partir de ahora suponemos que todos los números están escritos en sistema decimal y no lo indicaremos.
El número máximo de decimales que soporta el ordenador en la representación
interna de un número real se denomina precisión. Supongamos
que la precisión es ; entonces todo número real
se puede representar de la forma
De hecho, supuesto que el redondeo
sea simétrico, ese mismo número máquina representa a todos los números del intervalo
Por ejemplo, si la precisión es
, el número
representa indistintamente
a todos los números del intervalo
La diferencia entre cualquiera de estos
números y
es el error de redondeo
correspondiente. Lógicamente, los errores de redondeo se producen tanto en la
entrada y salida de los datos, como en todas las operaciones intermedias. Por
ejemplo, si la precisión del ordenador fuese de
cifras y hubiese que multiplicar
los números
y
, entonces
el valor
tiene
que aproximarse por
si redondea de forma simétrica
, o por
si se redondea por corte.
Reorganizando la memoria del ordenador se puede aumentar la precisión en los redondeos. De hecho, desde los primeros ordenadores se pudo trabajar en doble precisión. Programas como Mathematica van mucho más allá y son capaces de aumentar la precisión sin más límite que la memoria del ordenador.
A continuación se comentan brevemente algunos conceptos básicos.
Si es la
solución exacta de un problema y
es una aproximación de la
misma, entonces
es el error
absoluto cometido. Si no tenemos más información, el error absoluto no
dice nada por sí solo; por ejemplo, el error absoluto en una pesada fue de
gramos. Cuando
se denomina
error relativo a
. Como, en general, no se
conoce
, el error
relativo se suele aproximar por el valor
. El error relativo tiene
que ser muy próximo a cero para que la aproximación sea buena; por ejemplo, si
el peso exacto debía ser
gramos, se habría cometido
un error muy importante y el error relativo sería
. Sin embargo, el error
relativo sería
y el error absoluto
despreciable si el peso exacto fuese
Kg.
En la práctica no se suelen conocer los errores absoluto y relativo, sino
cotas de los mismos, y
, de
tal forma que se verifican las desigualdades
y
.
También se suele notar
y
, o a la inversa
y
.
Supuesto que se conozcan cotas para los errores absoluto y relativo de unas
cantidades ,
,
es
interesante conocer una cota del resultado obtenido al efectuar una operación
elemental (
)
con las mismas. Es inmediato comprobar que
ya que, si
e
, entonces
En cuanto al error relativo en la suma o la resta, de e
se deduce que
; por tanto, supuesto que
, la
división por
conduce
a la igualdad
de tal forma que, si tanto
como
son de igual signo, se tiene
es decir,
Pero si
e
tienen signos opuestos y
valores muy similares el error relativo se puede disparar.
Es el efecto de la cancelación que se produce al restar cantidades casi iguales
que comentaremos después.
En cuanto al producto y al cociente, supondremos que el producto de por
y los cuadrados de ellos
son cantidades despreciables.
Para la multiplicación se tiene que por tanto, el error relativo en la
multiplicación está acotado (aproximadamente) por
De forma análoga, para el cociente se llega a la misma cota:
En lo que se refiere a la evaluación en un punto de la función
, que suponemos derivable
con continuidad, del desarrollo de Taylor se deduce que
De
forma análoga, si
es una función de varias
variables,
,
digamos
, una
cota del error absoluto es
Un desarrollo teórico más extenso sobre propagación de los errores en los operaciones escapa del interés de este libro. Una introducción suele encontrarse en muchos libros de Análisis Numérico; en general, una acotación del error cometido después de miles o millones de operaciones suele ser un valor muy pesimista, ya que supondría que el error es siempre de igual signo y se acumula, hecho que en la práctica rara vez ocurre.
Si es el
mayor entero para el cual
se dice que
aproxima
a
con
dígitos
decimales significativos. Por ejemplo, para
se tiene que
es
una aproximación con cuatro dígitos significativos ya que
Cuando en un problema se dispone de una sucesión de valores, , convergente a la solución
del mismo y se usa un método numérico que emplee un valor
como aproximación de la
solución, el error cometido se llama error de truncamiento
o truncatura. Por ejemplo, si consideramos la aproximación
, cometemos el
error de truncadura
Análogamente, a veces se
tiene fórmulas procedentes de despreciar el último término de un desarrollo
finito de Taylor. El error cometido es por truncamiento. Por ejemplo, como
, entonces al aproximar la
derivada de
en
por
supuesto que no se cometan errores al evaluar la función
en
y en
, ni en la resta, ni en la
división, el error cometido es
y corresponde al truncamiento
efectuado al despreciar el último término del desarrollo de Taylor.
Pero el ejemplo anterior, correspondiente a la aproximación de la derivada,
es apropiado para mostrar la aparición de otros errores. Cuando es pequeño las cantidades
y
son muy similares, cada vez tendrán mayor número de cifras coincidentes y, por
tanto, al efectuar la resta se pierden cifras significativas. Es lo que se
denomina error por cancelación. Siempre que se restan
cantidades muy próximas se produce un error por cancelación, que puede pasar a a
ser un error muy grande cuando va multiplicado por un valor grande, como en el
ejemplo anterior, en el que el factor
puede ser grande. Aparecen
en la fórmula de derivación numérica dos errores con comportamiento diferente
respecto del valor de
: el de truncamiento, que
decrece cuando
disminuye (prácticamente
proporcional a
), y el de cancelación y
redondeo en el numerador (digamos
) que va dividido por
, es decir, inversamente
proporcional a
. No por disminuir
más y más el error va a ser
menor. Al contrario, llegará un momento en el que aumentará rápidamente debido
al término
. Pero
llega otro momento en el que los valores de
y
son idénticos para el ordenador, de tal forma que, aunque disminuya
, la aproximación de la
derivada será siempre
y el error será
.
Para algunos problemas podemos organizar los cálculos de forma que se evite
el error por cancelación. Por ejemplo, para todo , la
expresión
es
equivalente a
, cuyo valor es próximo a
;
sin embargo, para
suficientemente grande la
primera expresión da cero (operando en modo científico).
Muchas veces disponemos de una expresión que nos da, para cualquier , un valor
como aproximación del valor exacto
y se sabe que existe una
constante
tal
que
Entonces se dice que el error
absoluto
es un
infinitésimo de orden
, y se expresa
. Para valores positivos y
pequeños de
podemos
considerar
En ocasiones la expresión es una combinación de datos
relativos a una función
(por ejemplo, una
combinación de valores de
y de algunas de sus
derivadas), mientras que el valor
correponde a una
manipulación de
que sólo puede realizarse de
forma exacta para ciertas funciones (al menos las de tipo polinómico). En tal
caso, los polinomios constituyen unas funciones test para medir la bondad de la
aproximación, y se dice que
tiene orden de precisión
si es exacta para
las funciones
,
,
,
y comete error distinto de
cero para la función
Por ejemplo, si usamos
para aproximar el valor
, cuando
se obtiene
y para
resulta que
, mientras que si
, se verifica que
Por
tanto el orden de exactitud es
.
Podemos identificar un problema como una entrada de datos, , que tras sufrir un
proceso,
, da una
salida
, lo que se
nota
. La
entrada
puede ser
un número, un vector, una matriz, etc. Lo mismo es válido para
. ?`Cómo se mide la
sensibilidad de
frente a pequeñas
variaciones de
, supuesto que el proceso
se realiza con
precisión infinita? En el caso más habitual en el que tanto
como
son distintos de cero, las
variaciones se consideran en términos relativos. El factor que las relaciona es
el condicionamiento. Veamos algún ejemplo.
Supongamos que el proceso consiste en evaluar una función real, , en un punto,
, de modo que
. Si
es derivable, entonces
Como
suponemos que
, podemos escribir
Esto sugiere definir el
condicionamiento de
en
,
, por
Mide
la perturbación relativa de
frente a una perturbación
relativa de
.
Cuando es una
función de
en
el condicionamiento de cada
una de las componentes
respecto de cada una de las
variables
,
, es
Para analizar la sensibilidad de frente a una perturbación
del vector
hemos de
considerar normas vectoriales y matriciales compatibles. Por ejemplo, si
representa la matriz
jacobiana de
, empleando
la norma del máximo concluimos que
de forma que
es el
condicionamiento en este caso.
Uno de los problemas en los que con más frecuencia hay que estimar el
condicionamiento es el correspondiente a la resolución de sistemas lineales.
Como se verá en aquel tema, el condicionamiento de una matriz viene dado por el
producto de la norma de la matriz por la norma de su inversa, esto es . Un sistema puede ser de
dimensión muy pequeña y tener un mal condicionamiento. Por ejemplo, consideremos
la matriz
Su determinante vale
. Su inversa es
Así,
con cualquier norma matricial
será grande y
muy grande. Concretamente,
si sumamos los valores absolutos de los elementos de cada fila y nos quedamos
con el mayor valor de los obtenidos (norma del máximo para matrices), se tiene
y
con lo cual
(un valor enorme). Los
condicionamientos bajos al trabajar con matrices son los que valen poco más de
la unidad.
En todos los casos, si el condicionamiento (o número de condición) es alto se dice que el problema es mal condicionado y debemos cuidar mucho la precisión de los datos porque un pequeño error inicial en los mismos (por ejemplo, un redondeo) puede dar lugar a grandes diferencias en los resultados.
La estabilidad se refiere a la forma en que repercuten los errores iniciales
y los ocurridos durante el proceso en los resultados finales. Así, cuando estos
errores se van propagando y ampliando de forma muy considerable se dice que el
proceso es inestable, mientras que cuando los posibles errores iniciales y los
que surgen en el proceso van amortiguándose se dice que el proceso es estable.
El proceso de resolución de un problema puede ser bien condicionado y ser
inestable. La inestabilidad afecta a todo el proceso; por tanto, es posible que
cambiando el algoritmo de resolución pueda evitarse. Por ejemplo, es fácil
demostrar por inducción que la sucesión de valores puede generarse
indistintamente a partir de los siguientes algoritmos:
,
.
,
,
,
.
Sin embargo, con el segundo (operando con 6 cifras de precisión) el
decimosexto término es , frente al valor
.
Análogamente, la sucesión puede generarse a partir
del algoritmo
,
,
,
, que
también es inestable.
Combinando estabilidad y condicionamiento sólo estamos seguros de que los resultados son correctos cuando aplicamos un algoritmo estable a un problema bien condicionado. En cualquiera de los otros tres casos no estamos seguros de que los resultados sean fiables.
Muchas veces no sabemos si el problema que estamos resolviendo está bien o
mal condicionado y si el algoritmo usado es estable o no. Lo único que sabemos
es que a partir de unos datos produce unos resultados. Si los resultados fuesen
precisos seguramente el problema estaría bien condicionado y el método de
resolución sería estable. Uno de los procedimientos más simples para estimar la
veracidad de los resultados es el método de
permutación-perturbación, que consiste en resolver el mismo problema
varias veces, permutando las operaciones (o parte del proceso) que sea posible y
redondeando los datos iniciales y los resultados intermedios cada vez, por
exceso o por defecto, de forma aleatoria. Entonces la media de los resultados,
, dividida por la
desviación típica de los mismos,
, sirve como estimador
estadístico, de forma que
tiene que tener valores muy
similares (que disten menos de
) cuando se aplica a dos
tandas de perturbaciones. En la práctica, si después de efectuar tres o cuatro
permutaciones-perturbaciones los resultados difieren poco en términos relativos
es casi seguro que son fiables.
A veces el condicionamiento es tan malo que no es necesario recurrir a este estimador, sino que al aplicar varias perturbaciones los resultados son tan dispares que resulta evidente.
Por ejemplo, hemos aplicado a cada elemento de la matriz anterior, , una perturbación aleatoria
comprendida entre
y
(sumando a cada
elemento de
el valor
-0.05 Random[]) y hemos resuelto el sistema
, siendo
La
solución exacta es
. En cada una de las cinco
perturbaciones realizadas al menos una de las componentes del vector solución ha
variado en más de
veces, incluso ha cambiado
de signo. Concretamente, si la matriz perturbada es
entonces
.
Ni que decir tiene que en un caso como el anterior cualquier error pequeño en los coeficientes del sistema puede llevarnos a una solución completamente errónea.
Bibliografía
A. Aubanell, A. Benseny, A. Delshams, Útiles Básicos de Cálculo Numérico, Labor, Barcelona, 1993.
W. Gautschi, Numerical Analysis. An Introduction, Birkhäuser,1997.
J. Martínez, A, Martínez y A. Lirola, Errores de redondeo: problemas y soluciones, Revista de Informática y Automática, Julio de 1985.
J. H Mathews and K. D. Fink, Métodos Numéricos con Matlab, Prentice Hall, 1999