code: public T combine( int insertRow, int insertCol, T B) {
          convertType.specify(this,B);
          T A = convertType.convert(this);
          B = convertType.convert(B);
  
          if( insertRow == SimpleMatrix.END ) {
              insertRow = mat.getNumRows();
          }
  
          if( insertCol == SimpleMatrix.END ) {
              insertCol = mat.getNumCols();
          }
  
          int maxRow = insertRow + B.numRows();
          int maxCol = insertCol + B.numCols();
  
          T ret;
  
          if( maxRow > mat.getNumRows() || maxCol > mat.getNumCols()) {
              int M = Math.max(maxRow,mat.getNumRows());
              int N = Math.max(maxCol,mat.getNumCols());
  
              ret = A.createMatrix(M,N, A.getType());
              ret.insertIntoThis(0,0,A);
          } else {
              ret = A.copy();
          }
  
          ret.insertIntoThis(insertRow,insertCol,B);
  
          return ret;
      }
docs: <p>
  Creates a new matrix that is a combination of this matrix and matrix B.  B is
  written into A at the specified location if needed the size of A is increased by
  growing it.  A is grown by padding the new area with zeros.
  </p>
  
  <p>
  While useful when adding data to a matrix which will be solved for it is also much
  less efficient than predeclaring a matrix and inserting data into it.
  </p>
  
  <p>
  If insertRow or insertCol is set to SimpleMatrix.END then it will be combined
  at the last row or column respectively.
  <p>
  
  @param insertRow Row where matrix B is written in to.
  @param insertCol Column where matrix B is written in to.
  @param B The matrix that is written into A.
  @return A new combined matrix.