static DoubleQRDecompTest()
    {        
      DoubleMatrix a = new DoubleMatrix(3);
      a[0,0] = -1.0;
      a[0,1] = 5.0;
      a[0,2] = 6.0;
      a[1,0] = 3.0;
      a[1,1] = -6.0;
      a[1,2] = 1.0;
      a[2,0] = 6.0;
      a[2,1] = 8.0;
      a[2,2] = 9.0;
      qr = new DoubleQRDecomp(a);

      a = new DoubleMatrix(2,3);
      a[0,0] = -1.0;
      a[0,1] = 5.0;
      a[0,2] = 6.0;
      a[1,0] = 3.0;
      a[1,1] = -6.0;
      a[1,2] = 1.0;
      wqr = new DoubleQRDecomp(a);

      a = new DoubleMatrix(3,2);
      a[0,0] = -1.0;
      a[0,1] = 5.0;
      a[1,0] = 3.0;
      a[1,1] = -6.0;
      a[2,0] = 6.0;
      a[2,1] = 8.0;
      lqr = new DoubleQRDecomp(a);
    }
 public void NullTest()
 {
   DoubleQRDecomp test = new DoubleQRDecomp(null);
 }
    public void SolveMatrix()
    {
      DoubleMatrix b = new DoubleMatrix(3);
      b[0,0] = 2;
      b[0,1] = 2;
      b[0,2] = 2;
      b[1,0] = 13;
      b[1,1] = 13;
      b[1,2] = 13;
      b[2,0] = 25;
      b[2,1] = 25;
      b[2,2] = 25;
      DoubleMatrix x = qr.Solve(b);
      Assert.AreEqual(x[0,0],2.965,TOLERENCE);
      Assert.AreEqual(x[0,1],2.965,TOLERENCE);
      Assert.AreEqual(x[0,2],2.965,TOLERENCE);
      Assert.AreEqual(x[1,0],-0.479,TOLERENCE);
      Assert.AreEqual(x[1,1],-0.479,TOLERENCE);
      Assert.AreEqual(x[1,2],-0.479,TOLERENCE);
      Assert.AreEqual(x[2,0],1.227,TOLERENCE);
      Assert.AreEqual(x[2,1],1.227,TOLERENCE);
      Assert.AreEqual(x[2,2],1.227,TOLERENCE);

      b = new DoubleMatrix(3,2);
      b[0,0] = 2;
      b[0,1] = 2;
      b[1,0] = 13;
      b[1,1] = 13;
      b[2,0] = 25;
      b[2,1] = 25;
      x = qr.Solve(b);
      Assert.AreEqual(x[0,0],2.965,TOLERENCE);
      Assert.AreEqual(x[0,1],2.965,TOLERENCE);
      Assert.AreEqual(x[1,0],-0.479,TOLERENCE);
      Assert.AreEqual(x[1,1],-0.479,TOLERENCE);
      Assert.AreEqual(x[2,0],1.227,TOLERENCE);
      Assert.AreEqual(x[2,1],1.227,TOLERENCE);

      b = new DoubleMatrix(3,4);
      b[0,0] = 2;
      b[0,1] = 2;
      b[0,2] = 2;
      b[0,3] = 2;
      b[1,0] = 13;
      b[1,1] = 13;
      b[1,2] = 13;
      b[1,3] = 13;
      b[2,0] = 25;
      b[2,1] = 25;
      b[2,2] = 25;
      b[2,3] = 25;
      x = qr.Solve(b);
      Assert.AreEqual(x[0,0],2.965,TOLERENCE);
      Assert.AreEqual(x[0,1],2.965,TOLERENCE);
      Assert.AreEqual(x[0,2],2.965,TOLERENCE);
      Assert.AreEqual(x[0,3],2.965,TOLERENCE);
      Assert.AreEqual(x[1,0],-0.479,TOLERENCE);
      Assert.AreEqual(x[1,1],-0.479,TOLERENCE);
      Assert.AreEqual(x[1,2],-0.479,TOLERENCE);
      Assert.AreEqual(x[1,3],-0.479,TOLERENCE);
      Assert.AreEqual(x[2,0],1.227,TOLERENCE);
      Assert.AreEqual(x[2,1],1.227,TOLERENCE);
      Assert.AreEqual(x[2,2],1.227,TOLERENCE);
      Assert.AreEqual(x[2,3],1.227,TOLERENCE);

      DoubleMatrix A = new DoubleMatrix(4,3);
      A[0,0] = -4.18;
      A[0,1] = -5.011;
      A[0,2] = -5.841;
      A[1,0] = 4.986;
      A[1,1] = 5.805;
      A[1,2] = 6.624;
      A[2,0] = 3.695;
      A[2,1] = 3.687;
      A[2,2] = 3.679;
      A[3,0] = -5.489;
      A[3,1] = -7.024;
      A[3,2] =  8.56;

      DoubleQRDecomp qrd = new DoubleQRDecomp(A);
      DoubleMatrix B = new DoubleMatrix(4,1);
      B[0,0] = 1;
      B[1,0] = 4;
      B[2,0] = 2;
      B[3,0] = 1;

      x = qrd.Solve(B);
      Assert.AreEqual(x[0,0],2.73529,TOLERENCE);
      Assert.AreEqual(x[1,0],-2.15822,TOLERENCE);
      Assert.AreEqual(x[2,0], 0.0998564,TOLERENCE);

      B = new DoubleMatrix(4,3);
      B[0,0] = 1;
      B[1,0] = 4;
      B[2,0] = 2;
      B[3,0] = 1;
      B[0,1] = 1;
      B[1,1] = 4;
      B[2,1] = 2;
      B[3,1] = 1;
      B[0,2] = 1;
      B[1,2] = 4;
      B[2,2] = 2;
      B[3,2] = 1;

      x = qrd.Solve(B);
      Assert.AreEqual(x[0,0],2.73529,TOLERENCE);
      Assert.AreEqual(x[1,0],-2.15822,TOLERENCE);
      Assert.AreEqual(x[2,0], 0.0998564,TOLERENCE);
      Assert.AreEqual(x[0,1],2.73529,TOLERENCE);
      Assert.AreEqual(x[1,1],-2.15822,TOLERENCE);
      Assert.AreEqual(x[2,1], 0.0998564,TOLERENCE);
      Assert.AreEqual(x[0,2],2.73529,TOLERENCE);
      Assert.AreEqual(x[1,2],-2.15822,TOLERENCE);
      Assert.AreEqual(x[2,2], 0.0998564,TOLERENCE);
    }