Guest User

Untitled

a guest
Feb 17th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. public Double innerProd(Matrix v, Matrix w){
  2. Double sum = 0.0;
  3. for (int i = 0; i < v.numRows(); i++){
  4. sum += v.getElement(i,0)*w.getElement(i,0).conjugate();
  5. }
  6. return sum;
  7. }
  8.  
  9. public Matrix proj(Matrix u, Matrix a){
  10. return u.scalarMult(innerProd(u,a)/innerProd(u,u));
  11. }
  12.  
  13. public Matrix[] QR(Matrix X){
  14. ArrayList<Matrix> U = new ArrayList();
  15. ArrayList<Matrix> E = new ArrayList();
  16. ArrayList<Matrix> A = new ArrayList();
  17. for (int j = 0; j < X.numCols; j++) {
  18. Matrix a = X.getCol(j);
  19. Matrix u = a.duplicate();
  20. for (int k = 0; k < j; k++) {
  21. u = u.subtract((proj(U.get(k), a);
  22. }
  23. U.add(u);
  24. E.add(u.scalarDivide(u.mag()));
  25. int z = 0;
  26. do {
  27. a = a.add(E.get(z).scalarMult(innerProd(E.get(z), a)));
  28. z++;
  29. } while (z < j);
  30. A.add(a);
  31. }
  32. Matrix Q = new Matrix(X.numRows, X.numCols);
  33. for (int j = 0; j < X.numCols; j++){
  34. for (int i = 0; i < X.numRows; i++)
  35. Q.setElement(E.get(j).getElement(i, 0), i, j);
  36. }
  37. return new Matrix[]{Q, Q.transpose().mult(this)};
  38. }
Add Comment
Please, Sign In to add comment