static FloatQRDecompTest()
 {   
   FloatMatrix a = new FloatMatrix(3);
   a[0,0] = -1.0f;
   a[0,1] = 5.0f;
   a[0,2] = 6.0f;
   a[1,0] = 3.0f;
   a[1,1] = -6.0f;
   a[1,2] = 1.0f;
   a[2,0] = 6.0f;
   a[2,1] = 8.0f;
   a[2,2] = 9.0f;
   qr = new FloatQRDecomp(a);
   
   a = new FloatMatrix(2,3);
   a[0,0] = -1.0f;
   a[0,1] = 5.0f;
   a[0,2] = 6.0f;
   a[1,0] = 3.0f;
   a[1,1] = -6.0f;
   a[1,2] = 1.0f;
   wqr = new FloatQRDecomp(a);
   
   a = new FloatMatrix(3,2);
   a[0,0] = -1.0f;
   a[0,1] = 5.0f;
   a[1,0] = 3.0f;
   a[1,1] = -6.0f;
   a[2,0] = 6.0f;
   a[2,1] = 8.0f;
   lqr = new FloatQRDecomp(a);
 }
 public void NullTest()
 {
   FloatQRDecomp test = new FloatQRDecomp(null);
 }
    public void SolveMatrix()
    {
      FloatMatrix b = new FloatMatrix(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;
      FloatMatrix 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 FloatMatrix(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 FloatMatrix(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);

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

      FloatQRDecomp qrd = new FloatQRDecomp(A);
      FloatMatrix B = new FloatMatrix(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 FloatMatrix(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);
    }