En esta sección estudiaremos cúan sensitiva es la solución
del sistema lineal Ax=b a cambios o perturbaciones en los datos A y b. Note
que A ó B pueden contener errores ya sea por las truncaciones envueltas
al entrar estos en la computadora o porque sean datos experimentales. De
modo que queremos ver como esto puede afectar la solución calculada
x. Primero estudiamos variaciones en b unicamente. Sea
una
aproximación de b y
la solución
del sistema (aproximado)
. Queremos
estimar el error
en terminos la diferencia
. Para esto
definimos:
(3.19)
Estas se conocen como la norma vectorial infinita y la norma matricial asociada respectivamente. Estas normas satisfacen las siguientes propiedades para cualesquieras vectores x,y y matrices A,B:
Tenemos ahora el siguiente teorema:
Teorema (3.3): Sea A una matriz nosingular. Sean
x, las soluciones
de los sistemas Ax=b y
. Entonces
(3.20)
Demostración: De Ax=b y
obtenemos
que
. Como
A es nosingular, entonces
. Usando la
propiedad (4) de las normas obtenemos que
. Dividiendo
por
en ambos
lados obtenemos
Pero . Usando
esto arriba obtenemos el resultado.
Si definimos ,
y el número de condición de A por
(3.21)
entonces podemos escribir el resultado del teorema como
(3.22)
De modo que si
es "grande", entonces
se puede
magnificar por un factor hasta de
. Decimos pues
que el sistema Ax=b es mal acondicionado si
es "grande".
De lo contrario el sistema se dice que es bien acondicionado. Note
que como
,
entonces
i.e., para
toda matriz A. En MATLAB podemos calcular el número de condición
de A con la instrucción cond(A). Este
no es el número de condición en la norma (3.19) pero si en
lo que se conoce como la norma dos de A. La instrucción rcond(A) nos
da una aproximación del inverso de
cond(A). rcond
es mucho más rápida que cond
para matrices de tamaño grande.
En forma similar se puede demostrar el resultado que incluye variaciones en A y b ambas. Simplemente enunciamos el resultado.
Teorema (3.4): Sea A una matriz nosingular y
otra matriz
tal que
(3.23)
Entonces es
nosingular y
(3.24)
Ejemplo 7: La matriz de Hilbert de orden n se define por
(3.25)
Note que Hn es simétrica para toda n ³ 1. Usando la instrucción de MATLAB, hilb(n) podemos generar la matriz de Hilbert de orden n. La instrucción invhilb(n) calcula el inverso exacto de Hn. Por ejemplo
hilb(5)
ans =
1.0000 0.5000 0.3333 0.2500 0.2000
0.5000 0.3333 0.2500 0.2000 0.1667
0.3333 0.2500 0.2000 0.1667 0.1429
0.2500 0.2000 0.1667 0.1429 0.1250
0.2000 0.1667 0.1429 0.1250 0.1111
que es la matriz de Hilbert de orden 5 truncada a cuatro cifras aunque MATLAB guarda más cifras internamente. Mientras que
invhilb(5)
ans =
25 -300 1050 -1400 630
-300 4800 -18900 26880 -12600
1050 -18900 79380 -117600 56700
-1400 26880 -117600 179200 -88200
630 -12600 56700 -88200 44100
produce el inverso exacto de H5. Podemos calcular el número de condición de H5 según definido en (3.21) mediante:
norm(hilb(5),inf)*norm(invhilb(5),inf)
ans =
943656
lo que indica el mal acondicionamiento de la matriz de Hilbert apenas para n=5. Este número compara con
cond(hilb(5))
ans =
4.7661e+005
y con
1/rcond(hilb(5))
ans =
6.9409e+005
Usando la instrucción flops de MATLAB podemos estimar que el computo con cond requiere de 937 operaciones de punto flotante mientras que el cálculo con rcond toma 296 operaciones.
El Método de Eliminación Gaussiana produce la solución exacta de un sistema lineal en aproximadamente (1/3)n3 operaciones aritméticas donde n es el orden de la matriz de coeficientes A. En general, debido a que los cómputos se hacen con precisión finita, la solución obtenida por Eliminación Gaussiana no es la solución exacta del sistema (aunque esta cerca de serlo si el sistema es bien acondicionado). Veamos ahora un proceso iteratívo que toma la solución calculada por el Método de Eliminación Gaussiana y trata de mejorarla.
Sea x(0) la solución calculada por Eliminación Gaussiana
y x la solución exacta del sistema, i.e., Ax=b. Para cualquier
defina
(error exacto)
y
(los residuos).
Entonces es fácil ver que
, de modo que
utilizando la factorización LU de A ya calculada para obtener
x(0), podemos resolver
. Este sistema
tampoco se puede resolver en forma exacta obteniendo asi una aproximación
e(k) de
. Definimos
ahora
la
cual debe ser una mejor aproximación de x que
. El proceso
continua de esta manera en forma inductiva hasta que un cierto criterio de
"paro" se cumple y el proceso termina. En forma algorítmica
tenemos:
Note que en el cálculo del residuo r(k) en el paso (3a) tenemos cancelación de cifras significativas ya que Ax(k)»b. Para evitar esto el cálculo debe hacerse en presición extendida y el resto de los cálculos en presición normal. El ciclo en (3) se puede detener con un criterio como
(3.26)
lo que garantiza t cifras correctas en la solución calculada en caso de convergencia. Normalmente sin embargo el ciclo no debe ejecutarse más de dos veces.
Note que el cálculo de r(k) en (3a) requiere de n2 multiplicaciones con aproximadamente la misma cantidad de sumas y restas. Para la solución del sistema en (3b) se usa la factorización LU de A del paso (1) de modo que esto toma aproximadamente n2 operaciones. Asi que cada pasada por el ciclo (3) conlleva aproximadamente 2n2 multiplicaciones y divisiones.
Ejemplo 8: Considere el sistema lineal
La solución exacta a tres cifras significativas es x1=15.2, x2=-18.7. Si resolvemos el sistema mediante eliminación Gaussiana sin pivoteo y usando aritmética de tres cifras tenemos:
de donde obtenemos
. El residual
de esta solución calculada esta dado por:
correcto a tres cifras. Podemos calcular e(0) mediante:
de donde obtenemos que
. La
solución mejorada es:
lo cúal es mejor que x(0). El proceso se puede repetir una o dos veces mas.
Cuando usamos Eliminación Gaussiana para resolver el sistema Ax=b
en una computadora normal, ocurren errores de redondeo en cada paso del proceso
debido a la aritmética finita de la máquina. Queremos estudiar
como estos errores se propagan o acumulan durante todo el proceso y estimar
el error en la solución calculada. En realidad al final del proceso
de eliminación Gaussiana obtenemos un vector
tal que
. En el
análisis de errores hacia atras nos interesa saber si
es la
solución exacta de otro problema que este cerca del problema original
en cierto sentido.
Primero repasamos algunas de las fórmulas del Capítulo 2. En
particular recordamos que las operaciones aritméticas de la computadora
se asumen que corresponden a la operación exacta pero truncada al
número de cifras de la máquina. Esto es si
denota la
operación aritmética
en la computadora,
entonces
(3.27)
donde para
el sistema de punto flotante (2.2) y
para el estandar
de la IEEE (2.3). Usando estas fórmulas repetidamente en (3.5), (3.8),
similar al análisis que hicimos de la sumatoria de n numéros,
obtenemos el siguiente resultado.
Teorema (3.5): Sea
la solución
calculada del sistema Ax=b mediante eliminación Gaussiana usando
aritmética de punto flotante base b con
una mantisa de t cifras. Sea u el epsilon de la máquina. Entonces
es la
solución exacta del sistema
donde
H=(hij) y
(3.28)
donde n es el tamaño de A y
(3.29)
El factor
del teorema mide la razón de crecimiento de las entradas de la matriz
de coeficientes según el método numérico progresa. La
cota superior de este factor depende de la estrategia de pivoteo que se use.
En particular
, para pivoteo
parcial (3.30)
, para pivoteo
completo o total
En cualquiera de los dos casos, si n no es muy grande, el teorema lo que
dice es que
es solución exacta de un problema que esta cerca del original. En
este sentido es que decimos que Eliminación Gaussiana es un método
estable. Esto no implica que
esté
cerca de la solución exacta x. De hecho si tomamos
en el Teorema
(3.4) y usamos las cotas del Teorema (3.5) obtenemos que
(3.31)
lo que dice que
estará cerca de x si A es una matriz bien acondicionada.
Dada una matriz A nxn de entradas complejas, un número
C (conjunto
de los números complejos) es un valor propio de A si existe
un vector
tal que
. Usando
propiedades de determinantes, es fácil ver que el problema de hallar
los valores propios de una matriz es equivalente al de hallar las raices
de un polinomio con coeficientes complejos. Por el Teorema Fundamental del
Algebra, tenemos ahora que toda matriz nxn tiene exactamente n valores propios
contando multiplicidades. También tenemos, por un teorema famoso de
Galois, que el cálculo de los valores propios de una matriz no se
puede hacer utilizando unicamente formulas algebraicas. Por tal razón
el cálculo de los valores propios de matrices es un problema
computacionalmente complejo y el poder estimar los mismos es de vitál
importancia. El estimado más crudo de los valores propios de una matriz
esta dado por la desigualdad
, donde
es valor
propio de A} (3.32)
se conoce como el radio espectral de A. Este estimado aunque útil en muchas ocaciones, no es muy preciso en cuanto a la localización de los valores propios de A. El Teorema de Gerschgorin va más allá en este sentido. Para A=(aij) definimos los radios
(3.33)
y los discos
(3.34)
El Teorema de Gerschgorin establece que cada valor propio de A pertenece al menos a uno de los Dis y que si k de los discos de Gerschgorin se intersecan entre si y estan aislados de los otros discos, entonces su unión contiene exactamente k de los valores propios de A.
es conveniente intercambiar primero las filas uno y cinco y luego las columnas uno y cinco (¿por qué?). Resuelva el sistema luego de permutar y calcúle la factorización LU de la matríz permutada.
usando aritmética finita con dos cifras decimales. El sistema
donde
tiene la
solución aproximada
. Calcúle
una mejor aproximación mediante un paso de refinamiento iterativo.
, b =
calcule una solución aproximada de Ax=b primero redondeando las entradas
de b al entero más cercano y luego resolviendo el resultante. Verifique
que la solución calculada es
= (12, 4,
2, 1)t. Sea
el vector
residual.
A = round(10 * rand(6)) ,
s = ones(6, 1) ,
b= A*s.
La solución al sistema lineal Ax = b es claramente s. Resuelva el sistema utilizando la operación \ de MATLAB. Calcule el error x - s. Ahora perturbamos el sistema como sigue. Deje que
t = 1.0e-12, E = rand(6) - 0.5, r = rand(6, 1) - 0.5
y sean
M = A + t * E, c = b + t * r
Resuelva el nuevo sistema perturbado Mz = c para z. Compare la solución z con la solución del sistema original calculando z - 1. ¿Cómo se compara el tamaño de la perturbación en la solución a el tamaño de las perturbaciones en A y b? Repita el análisis de perturbación con t =1.0e-04 y t =1.0e-02. ¿Es ó no el sistema Ax = b bien acondicionado? Explique. Utilice MATLAB para calcular el número de condición de A.
X = zeros(lenght(t), 5) , Y = X .
Las matrices X y Y se generan utilizando los siguientes comandos de MATLAB:
for i = 1 : 5
X (: , i) = r(i) * cos(t) + real (A (i, i));
Y (: , i) = r(i) * sin(t) + imag (A (i, i));
end
Sea e = eig(A). Podemos ahora graficar los valores propios y los discos de Gerschgorin con el comando
plot(X, Y, real(e), imag(e), 'x') .
B = [3 0.1 2; 0.1 7 2; 2 2 50]
D = diag([0.1, 0.1, 1]) , .
La nueva matriz C tiene los mismos valores propios que B. ¿Por qué? Explique. Utilice C para hallar intervalos que contengan los otros dos valores propios de B. Calcule y grafique los discos de Gerschgorin de C.