En algún algoritmo necesito calcular a=(XtX)−1Xty y b=(XtX)−1z en cada paso, donde X es un n×p matriz no cuadrada ( n≥p , p se incrementa en cada paso) y y,z son algunos vectores apropiados, pero me gustaría hacerlo de manera eficiente.
Lo que se me ocurrió hasta ahora:
- Para calcular sólo a cabe destacar que a es una solución de mínimos cuadrados, es decir a minimiza ‖ , por lo que habría calculado a utilizando la descomposición QR de X (el coste es O(np^2) pero ahora también tengo que calcular b .
- Así que otro enfoque ingenuo sería calcular W := X^tX y v = X^ty y, a continuación, calcular a= W^{-1} v , b= W^{-1} z . Este enfoque tiene la ventaja de que podríamos utilizar, por ejemplo, una descomposición Cholesky de W (coste O(p^3) ), pero los inconvenientes son que tenemos que calcular W primero (coste O(np^2) ) y que X^tX tiene un número de condición peor que X .
Pero, ¿existe una forma más eficiente de calcular a y b ?