public void SolveMatrix()
        {
            ComplexDoubleMatrix a = new ComplexDoubleMatrix(3);

            a[0, 0] = new Complex(1.1, 1.1);
            a[0, 1] = new Complex(2.2, -2.2);
            a[0, 2] = new Complex(3.3, 3.3);
            a[1, 0] = new Complex(4.4, -4.4);
            a[1, 1] = new Complex(5.5, 5.5);
            a[1, 2] = new Complex(6.6, -6.6);
            a[2, 0] = new Complex(7.7, 7.7);
            a[2, 1] = new Complex(8.8, -8.8);
            a[2, 2] = new Complex(9.9, 9.9);
            ComplexDoubleQRDecomp qr = new ComplexDoubleQRDecomp(a);

            ComplexDoubleMatrix b = new ComplexDoubleMatrix(3);

            b[0, 0] = new Complex(2.3, -3.2);
            b[0, 1] = new Complex(2.3, -3.2);
            b[0, 2] = new Complex(2.3, -3.2);
            b[1, 0] = new Complex(6.7, 7.8);
            b[1, 1] = new Complex(6.7, 7.8);
            b[1, 2] = new Complex(6.7, 7.8);
            b[2, 0] = new Complex(1.3, -9.7);
            b[2, 1] = new Complex(1.3, -9.7);
            b[2, 2] = new Complex(1.3, -9.7);

            ComplexDoubleMatrix X = qr.Solve(b);

            Assert.IsTrue(Comparer.AreEqual(X[0, 0], new Complex(-0.57, 1.14), .01));
            Assert.IsTrue(Comparer.AreEqual(X[0, 1], new Complex(-0.57, 1.14), .01));
            Assert.IsTrue(Comparer.AreEqual(X[0, 2], new Complex(-0.57, 1.14), .01));
            Assert.IsTrue(Comparer.AreEqual(X[1, 0], new Complex(1.03, -0.16), .01));
            Assert.IsTrue(Comparer.AreEqual(X[1, 1], new Complex(1.03, -0.16), .01));
            Assert.IsTrue(Comparer.AreEqual(X[1, 2], new Complex(1.03, -0.16), .01));
            Assert.IsTrue(Comparer.AreEqual(X[2, 0], new Complex(0.16, -0.52), .01));
            Assert.IsTrue(Comparer.AreEqual(X[2, 1], new Complex(0.16, -0.52), .01));
            Assert.IsTrue(Comparer.AreEqual(X[2, 2], new Complex(0.16, -0.52), .01));

            a       = new ComplexDoubleMatrix(3, 2);
            a[0, 0] = new Complex(1.1, 1.1);
            a[0, 1] = new Complex(2.2, -2.2);
            a[1, 0] = new Complex(4.4, -4.4);
            a[1, 1] = new Complex(5.5, 5.5);
            a[2, 0] = new Complex(7.7, 7.7);
            a[2, 1] = new Complex(8.8, -8.8);
            qr      = new ComplexDoubleQRDecomp(a);

            b       = new ComplexDoubleMatrix(3);
            b[0, 0] = new Complex(2.3, -3.2);
            b[0, 1] = new Complex(2.3, -3.2);
            b[0, 2] = new Complex(2.3, -3.2);
            b[1, 0] = new Complex(6.7, 7.8);
            b[1, 1] = new Complex(6.7, 7.8);
            b[1, 2] = new Complex(6.7, 7.8);
            b[2, 0] = new Complex(1.3, -9.7);
            b[2, 1] = new Complex(1.3, -9.7);
            b[2, 2] = new Complex(1.3, -9.7);

            X = qr.Solve(b);

            Assert.IsTrue(Comparer.AreEqual(X[0, 0], new Complex(-0.344, 0.410), .01));
            Assert.IsTrue(Comparer.AreEqual(X[0, 1], new Complex(-0.344, 0.410), .01));
            Assert.IsTrue(Comparer.AreEqual(X[0, 2], new Complex(-0.344, 0.410), .01));
            Assert.IsTrue(Comparer.AreEqual(X[1, 0], new Complex(1.01, -0.170), .01));
            Assert.IsTrue(Comparer.AreEqual(X[1, 1], new Complex(1.01, -0.170), .01));
            Assert.IsTrue(Comparer.AreEqual(X[1, 2], new Complex(1.01, -0.170), .01));
        }