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)); }
public static bool isEquals(FMatrixRBlock A, FMatrixRBlock B, float tol) { if (A.blockLength != B.blockLength) { return(false); } return(MatrixFeatures_FDRM.isEquals(A, B, tol)); }
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"); } }
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); }
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); }
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); }
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); }
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"); } }