code: @Override
      public void solve(ZMatrixRMaj B , ZMatrixRMaj X ) {
          if( B.numCols != X.numCols || B.numRows != n || X.numRows != n) {
              throw new IllegalArgumentException("Unexpected matrix size");
          }
  
          int numCols = B.numCols;
  
          double dataB[] = B.data;
          double dataX[] = X.data;
  
          if(decomposer.isLower()) {
              for( int j = 0; j < numCols; j++ ) {
                  for( int i = 0; i < n; i++ ) {
                      vv[i*2]   = dataB[(i*numCols+j)*2];
                      vv[i*2+1] = dataB[(i*numCols+j)*2+1];
                  }
                  solveInternalL();
                  for( int i = 0; i < n; i++ ) {
                      dataX[(i*numCols+j)*2  ] = vv[i*2];
                      dataX[(i*numCols+j)*2+1] = vv[i*2+1];
                  }
              }
          } else {
              throw new RuntimeException("Implement");
          }
      }
docs: <p>
  Using the decomposition, finds the value of 'X' in the linear equation below:<br>
  
  A*x = b<br>
  
  where A has dimension of n by n, x and b are n by m dimension.
  </p>
  <p>
  *Note* that 'b' and 'x' can be the same matrix instance.
  </p>
  
  @param B A matrix that is n by m.  Not modified.
  @param X An n by m matrix where the solution is writen to.  Modified.