docs: protected void configure( DenseMatrix64F initParam , DenseMatrix64F X , DenseMatrix64F Y )
      {
          if( Y.getNumRows() != X.getNumRows() ) {
              throw new IllegalArgumentException("Different vector lengths");
          } else if( Y.getNumCols() != 1 /*|| X.getNumCols() != 1*/ ) {
              throw new IllegalArgumentException("Inputs must be a column vector");
          }
  
          int numParam = initParam.getNumElements();
          int numPoints = Y.getNumRows();
  
          if( param.getNumElements() != initParam.getNumElements() ) {
              // reshaping a matrix means that new memory is only declared when needed
              this.param.reshape(numParam,1, false);
              this.d.reshape(numParam,1, false);
              this.H.reshape(numParam,numParam, false);
              this.negDelta.reshape(numParam,1, false);
              this.tempParam.reshape(numParam,1, false);
              this.A.reshape(numParam,numParam, false);
          }
  
          param.set(initParam);
  
          // reshaping a matrix means that new memory is only declared when needed
          temp0.reshape(numPoints,1, false);
          temp1.reshape(numPoints,1, false);
          tempDH.reshape(numPoints,1, false);
          jacobian.reshape(numParam,numPoints, false);
  
  
      }