| 187 | } |
| 188 | |
| 189 | private void qrUpdateQ(DenseMatrix Q, int k, double[] vk, double TwoOverBeta) |
| 190 | { |
| 191 | //Computing Q |
| 192 | |
| 193 | //We are computing Q' in what we are treating as the column major order, which represents Q in row major order, which is what we want! |
| 194 | for (int j = 0; j < Q.cols(); j++) |
| 195 | { |
| 196 | double[] Q_j = Q.matrix[j]; |
| 197 | double y = 0;//y = vk dot A_j |
| 198 | for (int i = k; i < Q.cols(); i++) |
| 199 | y += vk[i] * Q_j[i]; |
| 200 | |
| 201 | y *= TwoOverBeta; |
| 202 | for (int i = k; i < Q.rows(); i++) |
| 203 | { |
| 204 | Q_j[i] -= y * vk[i]; |
| 205 | } |
| 206 | } |
| 207 | |
| 208 | } |
| 209 | |
| 210 | private void qrUpdateR(int k, int N, DenseMatrix A, double[] vk, double TwoOverBeta, int M) |
| 211 | { |