Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public Double innerProd(Matrix v, Matrix w){
- Double sum = 0.0;
- for (int i = 0; i < v.numRows(); i++){
- sum += v.getElement(i,0)*w.getElement(i,0).conjugate();
- }
- return sum;
- }
- public Matrix proj(Matrix u, Matrix a){
- return u.scalarMult(innerProd(u,a)/innerProd(u,u));
- }
- public Matrix[] QR(Matrix X){
- ArrayList<Matrix> U = new ArrayList();
- ArrayList<Matrix> E = new ArrayList();
- ArrayList<Matrix> A = new ArrayList();
- for (int j = 0; j < X.numCols; j++) {
- Matrix a = X.getCol(j);
- Matrix u = a.duplicate();
- for (int k = 0; k < j; k++) {
- u = u.subtract((proj(U.get(k), a);
- }
- U.add(u);
- E.add(u.scalarDivide(u.mag()));
- int z = 0;
- do {
- a = a.add(E.get(z).scalarMult(innerProd(E.get(z), a)));
- z++;
- } while (z < j);
- A.add(a);
- }
- Matrix Q = new Matrix(X.numRows, X.numCols);
- for (int j = 0; j < X.numCols; j++){
- for (int i = 0; i < X.numRows; i++)
- Q.setElement(E.get(j).getElement(i, 0), i, j);
- }
- return new Matrix[]{Q, Q.transpose().mult(this)};
- }
Add Comment
Please, Sign In to add comment