code: public static double conditionP(DMatrixRMaj A , double p )
      {
          if( p == 2 ) {
              return conditionP2(A);
          } else if( A.numRows == A.numCols ){
              // square matrices are the typical case
  
              DMatrixRMaj A_inv = new DMatrixRMaj(A.numRows,A.numCols);
  
              if( !CommonOps_DDRM.invert(A,A_inv) )
                  throw new IllegalArgumentException("A can't be inverted.");
  
              return normP(A,p) * normP(A_inv,p);
          } else  {
              DMatrixRMaj pinv = new DMatrixRMaj(A.numCols,A.numRows);
              CommonOps_DDRM.pinv(A,pinv);
  
              return normP(A,p) * normP(pinv,p);
          }
      }
docs: <p>
  The condition number of a matrix is used to measure the sensitivity of the linear
  system <b>Ax=b</b>.  A value near one indicates that it is a well conditioned matrix.<br>
  <br>
  &kappa;<sub>p</sub> = ||A||<sub>p</sub>||A<sup>-1</sup>||<sub>p</sub>
  </p>
  <p>
  If the matrix is not square then the condition of either A<sup>T</sup>A or AA<sup>T</sup> is computed.
  <p>
  @param A The matrix.
  @param p p-norm
  @return The condition number.