Beispiel #1
0
 public void NullTest()
 {
     Assert.Throws(typeof(ArgumentNullException), () =>
     {
         var test = new ComplexDoubleQRDecomp(null);
     });
 }
        public void SquareDecomp()
        {
            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 qrd = new ComplexDoubleQRDecomp(a);
            ComplexDoubleMatrix   qq  = qrd.Q.GetConjugateTranspose() * qrd.Q;
            ComplexDoubleMatrix   qr  = qrd.Q * qrd.R;
            ComplexDoubleMatrix   I   = ComplexDoubleMatrix.CreateIdentity(3);

            // determine the maximum relative error
            double MaxError = 0.0;

            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; i < 3; i++)
                {
                    double E = ComplexMath.Absolute((qq[i, j] - I[i, j]));
                    if (E > MaxError)
                    {
                        MaxError = E;
                    }
                }
            }
            Assert.IsTrue(MaxError < 1.0E-14);

            MaxError = 0.0;
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; i < 3; i++)
                {
                    double E = ComplexMath.Absolute((qr[i, j] - a[i, j]) / a[i, j]);
                    if (E > MaxError)
                    {
                        MaxError = E;
                    }
                }
            }
            Assert.IsTrue(MaxError < 1.0E-14);
        }
 public void NullTest()
 {
     ComplexDoubleQRDecomp test = new ComplexDoubleQRDecomp(null);
 }
        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));
        }