MCPcopy Create free account
hub / github.com/EdwardRaff/JSAT / qr

Method qr

JSAT/src/jsat/linear/GenericMatrix.java:696–746  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

694 }
695
696 @Override
697 public Matrix[] qr()
698 {
699 int N = cols(), M = rows();
700 Matrix[] qr = new Matrix[2];
701
702 Matrix Q = Matrix.eye(M);
703 Matrix A;
704 if(isSquare())
705 {
706 mutableTranspose();
707 A = this;
708 }
709 else
710 A = this.transpose();
711 int to = cols() > rows() ? M : N;
712 double[] vk = new double[M];
713 for(int k = 0; k < to; k++)
714 {
715
716 double vkNorm = initalVKNormCompute(k, M, vk, A);
717 double beta = vkNorm;
718
719 double vk_k = vk[k] = A.get(k, k);//force into register, help the JIT!
720 vkNorm += vk_k*vk_k;
721 vkNorm = sqrt(vkNorm);
722
723
724 double alpha = -signum(vk_k) * vkNorm;
725 vk_k -= alpha;
726 vk[k] = vk_k;
727 beta += vk_k*vk_k;
728
729
730 if (beta == 0)
731 continue;
732 double TwoOverBeta = 2.0 / beta;
733
734 qrUpdateQ(Q, k, vk, TwoOverBeta);
735 qrUpdateR(k, N, A, vk, TwoOverBeta, M);
736 }
737 qr[0] = Q;
738 if(isSquare())
739 {
740 A.mutableTranspose();
741 qr[1] = A;
742 }
743 else
744 qr[1] = A.transpose();
745 return qr;
746 }
747
748 private void qrUpdateR(int k, int N, Matrix A, double[] vk, double TwoOverBeta, int M)
749 {

Callers

nothing calls this directly

Calls 15

eyeMethod · 0.95
mutableTransposeMethod · 0.95
transposeMethod · 0.95
initalVKNormComputeMethod · 0.95
getMethod · 0.95
qrUpdateQMethod · 0.95
qrUpdateRMethod · 0.95
mutableTransposeMethod · 0.95
transposeMethod · 0.95
submitMethod · 0.80
logMethod · 0.80
getNameMethod · 0.65

Tested by

no test coverage detected