Tanto la Gram Schmidt clásica como la modificada son inestables. Si lees el texto de Trefethen describe la diferencia entre Householder y los dos primeros como lo siguiente.
Se trata de la Gram-Schmidt clásica y modificada, descrita Ortogonalización triangular AR1,R2⋯Rn⏟ˆR−1=ˆQ
Abajo vemos a Householder, Triangularización ortogonal
Q1,Q2⋯Qn⏟ˆQ∗A=R
¿Por qué son diferentes?
El número de condición de una matriz triangular puede ser cualquier cosa así que si tienes una serie de ellas entonces puede crecer muy grande sin embargo las matrices ortogonales tienen número de condición 1 .
Al cambiar el ϵ se cambia el número de condición. Si se da cuenta de que ϵ está relacionado con los valores singulares. El primero es casi 1 .
import numpy as np
import math
eps = math.exp(1e-3)-1
A = np.matrix([[1 ,1,1],[eps, 0 ,0 ], [0 ,eps, 0], [0 , 0 ,eps ]])
u, s, vt = np.linalg.svd(A)
s
Out[12]: array([1.73205110e+00, 1.00050017e-03, 1.00050017e-03])
eps
Out[13]: 0.0010005001667083846
Debido a la ortogonalización parece ser √3
Tenga en cuenta que
κ(A)=σmax(A)σmin(A)=√3ϵ
Entonces notarías que como ϵ→0 κ→∞
Clásica Gram Schmidt
El proceso de Gram Schmidt es el siguiente para los clásicos
vj=aj−(q∗1aj)q1−(q∗2aj)q2−⋯−(q∗j−1aj)qj−1
podemos escribirlo así
q1=a1r11
q2=a2−r12q1r22
q3=a3−r13q1−r23q2r33 qn=an−∑n−1i=1rinqirnn
Ahora aquí está la Gram Schmidt modificada. Para empezar introducimos las proyecciones ortogonales
Gram Schmidt modificado
q1=P1a1‖
Más concretamente P_{j} es el proyector ortogonal. P_{j} es el m \times m matriz de rango m -(j-1) que proyecta \mathbb{C}^{m} en el espacio para \langle q_{1}, \cdots , q_{j-1} \rangle
El proyector P_{j} puede representarse explícitamente. Aquí representamos \hat{Q}_{j-1} como el m \times (j-1) matriz que contiene las columnas de la proyección orhtogonal. Es decir
P_{j} = I - \hat{Q}_{j-1}\hat{Q}_{j-1}^{*} \tag{9}
entonces obtenemos
v_{j} = P_{j}a_{j} \tag{10}
¿Cómo es esto más estable?
Una nota más
Su matriz es famosa. Es llamado el Matriz de Lauchli
Tanto en CGS como en MGS
donde 1 + \epsilon^{2} =1
v_{1} \to (1 , \epsilon, 0, 0) \tag{11}
r_{11} = \sqrt{1 + \epsilon^{2} } \approx 1 \tag{12}
q_{1} = \frac{v_{1}}{r_{11}} = (1 , \epsilon, 0, 0)\tag{13} v_{2} = (1,0,\epsilon,0) \tag{14} r_{12} = q_{1}^{T}a_{2} = q_{1}^{T}v_{2} = 1 \tag{15} v_{2} = v_{2} - r_{12}q_{1} = (0,-\epsilon, \epsilon,0) \tag{16} r_{22} = \sqrt{2}\epsilon \tag{17} q_{2} = (0,\frac{-1}{\sqrt{2}},\frac{1}{\sqrt{2}},0) \tag{18}
v_{3} = (1,0,0,\epsilon) \tag{19} r_{13} = q_{1}^{t}v_{3} = 1 \tag{20} v_{3} = v_{3} - r_{13}q_{1} = (0,-\epsilon,0,\epsilon) \tag{21}
Para CGS
r_{23} = q_{2}^{T}a_{3} =0 \tag{22} v_{3} = v_{3} - r_{23}q_{2} = (0,-\epsilon,0,\epsilon) \tag{23}
r_{33} = \sqrt{2} \epsilon \tag{24} q_{3} = \frac{v_{3}}{r_{33}} = (0,\frac{-1}{\sqrt{2}} ,0\frac{1}{\sqrt{2}} ) \tag{25}
Para MGS
r_{23} = q_{2}^{T}v_{3} =\frac{\epsilon}{\sqrt{2}} \tag{26} v_{3} = v_{3} - r_{23}q_{2} = (0,\frac{-\epsilon}{2},\frac{-\epsilon}{2}, \epsilon ) \tag{27}
r_{33} = \frac{\sqrt{6}}{\epsilon 2} \tag{28} q_{3} = \frac{v_{3}}{r_{33}} = (0,\frac{-1}{\sqrt{6}} ,\frac{1}{\sqrt{6}},\frac{2}{\sqrt{6}} ) \tag{29}
0 votos
Haga el mismo cálculo sin la aproximación ϵ<<1 . Deberías ver que sí obtienes vectores ortogonales. El problema es que usas esa aproximación repetidamente. Por ejemplo o3 utiliza los resultados aproximados b1 y b2 lo que hace que el fallo de aproximación se acumule demasiado.