Exemplo n.º 1
0
 public static bool isIdentical(FMatrix6 a, FMatrix6 b, float tol)
 {
     if (!MatrixFeatures_FDRM.isIdentical(a.a1, b.a1, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a2, b.a2, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a3, b.a3, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a4, b.a4, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a5, b.a5, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a6, b.a6, tol))
     {
         return(false);
     }
     return(true);
 }
        public virtual bool decompose(FMatrixRMaj orig)
        {
            A.set(orig);

            symmetric = MatrixFeatures_FDRM.isSymmetric(A, tol);

            return(symmetric ? symmetricAlg.decompose(A) : generalAlg.decompose(A));
        }
Exemplo n.º 3
0
        public static bool isEquals(FMatrixRBlock A, FMatrixRBlock B, float tol)
        {
            if (A.blockLength != B.blockLength)
            {
                return(false);
            }

            return(MatrixFeatures_FDRM.isEquals(A, B, tol));
        }
Exemplo n.º 4
0
        public void performImplicitSingleStep(int x1, int x2, float eigenvalue)
        {
            if (!createBulgeSingleStep(x1, eigenvalue))
            {
                return;
            }

            // get rid of the bump
            if (Q != null)
            {
                QrHelperFunctions_FDRM.rank1UpdateMultR(Q, u.data, gamma, 0, x1, x1 + 2, _temp.data);
                if (checkOrthogonal && !MatrixFeatures_FDRM.isOrthogonal(Q, UtilEjml.TEST_F32))
                {
                    throw new InvalidOperationException("Bad");
                }
            }

            if (printHumps)
            {
                Console.WriteLine("Applied first Q matrix, it should be humped now. A = ");
                A.print("%12.3fe");
                Console.WriteLine("Pushing the hump off the matrix.");
            }

            // perform simple steps
            for (int i = x1; i < x2 - 1; i++)
            {
                if (bulgeSingleStepQn(i) && Q != null)
                {
                    QrHelperFunctions_FDRM.rank1UpdateMultR(Q, u.data, gamma, 0, i + 1, i + 3, _temp.data);
                    if (checkOrthogonal && !MatrixFeatures_FDRM.isOrthogonal(Q, UtilEjml.TESTP_F32))
                    {
                        throw new InvalidOperationException("Bad");
                    }
                }

                if (printHumps)
                {
                    Console.WriteLine("i = " + i + " A = ");
                    A.print("%12.3fe");
                }
            }

            if (checkHessenberg && !MatrixFeatures_FDRM.isUpperTriangle(A, 1, UtilEjml.TESTP_F32))
            {
                A.print("%12.3fe");
                throw new InvalidOperationException("Bad matrix");
            }
        }
Exemplo n.º 5
0
 public static bool isIdentical(FMatrix2x2 a, FMatrix2x2 b, float tol)
 {
     if (!MatrixFeatures_FDRM.isIdentical(a.a11, b.a11, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a12, b.a12, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a21, b.a21, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a22, b.a22, tol))
     {
         return(false);
     }
     return(true);
 }
Exemplo n.º 6
0
 public static bool isIdentical(FMatrix4x4 a, FMatrix4x4 b, float tol)
 {
     if (!MatrixFeatures_FDRM.isIdentical(a.a11, b.a11, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a12, b.a12, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a13, b.a13, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a14, b.a14, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a21, b.a21, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a22, b.a22, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a23, b.a23, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a24, b.a24, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a31, b.a31, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a32, b.a32, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a33, b.a33, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a34, b.a34, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a41, b.a41, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a42, b.a42, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a43, b.a43, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a44, b.a44, tol))
     {
         return(false);
     }
     return(true);
 }
Exemplo n.º 7
0
 public static bool isIdentical(FMatrix6x6 a, FMatrix6x6 b, float tol)
 {
     if (!MatrixFeatures_FDRM.isIdentical(a.a11, b.a11, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a12, b.a12, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a13, b.a13, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a14, b.a14, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a15, b.a15, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a16, b.a16, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a21, b.a21, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a22, b.a22, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a23, b.a23, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a24, b.a24, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a25, b.a25, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a26, b.a26, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a31, b.a31, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a32, b.a32, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a33, b.a33, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a34, b.a34, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a35, b.a35, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a36, b.a36, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a41, b.a41, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a42, b.a42, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a43, b.a43, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a44, b.a44, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a45, b.a45, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a46, b.a46, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a51, b.a51, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a52, b.a52, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a53, b.a53, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a54, b.a54, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a55, b.a55, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a56, b.a56, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a61, b.a61, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a62, b.a62, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a63, b.a63, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a64, b.a64, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a65, b.a65, tol))
     {
         return(false);
     }
     if (!MatrixFeatures_FDRM.isIdentical(a.a66, b.a66, tol))
     {
         return(false);
     }
     return(true);
 }
Exemplo n.º 8
0
        public bool bulgeSingleStepQn(int i,
                                      float a11, float a21,
                                      float threshold, bool set)
        {
            float max;

            if (normalize)
            {
                max = Math.Abs(a11);
                if (max < Math.Abs(a21))
                {
                    max = Math.Abs(a21);
                }

//            if( max <= Math.Abs(A.get(i,i))*UtilEjml.F_EPS ) {
                if (max <= threshold)
                {
//                Console.WriteLine("i = "+i);
//                A.print();
                    if (set)
                    {
                        A.set(i, i - 1, 0);
                        A.set(i + 1, i - 1, 0);
                    }
                    return(false);
                }

                a11 /= max;
                a21 /= max;
            }
            else
            {
                max = 1;
            }

            // compute the reflector using the b's above

            float tau = (float)Math.Sqrt(a11 * a11 + a21 * a21);

            if (a11 < 0)
            {
                tau = -tau;
            }

            float div = a11 + tau;

            u.set(i, 0, 1);
            u.set(i + 1, 0, a21 / div);

            gamma = div / tau;

            // compute A_1 = Q_1^T * A * Q_1

            // apply Q*A  - just do the 3 rows
            QrHelperFunctions_FDRM.rank1UpdateMultR(A, u.data, gamma, 0, i, i + 2, _temp.data);

            if (set)
            {
                A.set(i, i - 1, -max * tau);
                A.set(i + 1, i - 1, 0);
            }

            // apply A*Q - just the three things
            QrHelperFunctions_FDRM.rank1UpdateMultL(A, u.data, gamma, 0, i, i + 2);

            if (checkUncountable && MatrixFeatures_FDRM.hasUncountable(A))
            {
                throw new InvalidOperationException("bad matrix");
            }

            return(true);
        }
Exemplo n.º 9
0
        private void performImplicitDoubleStep(int x1, int x2,
                                               float b11, float b21, float b31)
        {
            if (!bulgeDoubleStepQn(x1, b11, b21, b31, 0, false))
            {
                return;
            }

            // get rid of the bump
            if (Q != null)
            {
                QrHelperFunctions_FDRM.rank1UpdateMultR(Q, u.data, gamma, 0, x1, x1 + 3, _temp.data);
                if (checkOrthogonal && !MatrixFeatures_FDRM.isOrthogonal(Q, UtilEjml.TEST_F32))
                {
                    u.print();

                    Q.print();
                    throw new InvalidOperationException("Bad");
                }
            }

            if (printHumps)
            {
                Console.WriteLine("Applied first Q matrix, it should be humped now. A = ");
                A.print("%12.3fe");
                Console.WriteLine("Pushing the hump off the matrix.");
            }

            // perform float steps
            for (int i = x1; i < x2 - 2; i++)
            {
                if (bulgeDoubleStepQn(i) && Q != null)
                {
                    QrHelperFunctions_FDRM.rank1UpdateMultR(Q, u.data, gamma, 0, i + 1, i + 4, _temp.data);
                    if (checkOrthogonal && !MatrixFeatures_FDRM.isOrthogonal(Q, UtilEjml.TEST_F32))
                    {
                        throw new InvalidOperationException("Bad");
                    }
                }

                if (printHumps)
                {
                    Console.WriteLine("i = " + i + " A = ");
                    A.print("%12.3fe");
                }
            }
            if (printHumps)
            {
                Console.WriteLine("removing last bump");
            }
            // the last one has to be a single step
            if (x2 - 2 >= 0 && bulgeSingleStepQn(x2 - 2) && Q != null)
            {
                QrHelperFunctions_FDRM.rank1UpdateMultR(Q, u.data, gamma, 0, x2 - 1, x2 + 1, _temp.data);
                if (checkOrthogonal && !MatrixFeatures_FDRM.isOrthogonal(Q, UtilEjml.TEST_F32))
                {
                    throw new InvalidOperationException("Bad");
                }
            }
            if (printHumps)
            {
                Console.WriteLine(" A = ");
                A.print("%12.3fe");
            }
//        A.print("%12.3fe");

            if (checkHessenberg && !MatrixFeatures_FDRM.isUpperTriangle(A, 1, UtilEjml.TEST_F32))
            {
                A.print("%12.3fe");
                throw new InvalidOperationException("Bad matrix");
            }
        }