code: public static void addOuterProd(double gamma , DMatrixD1 x, DMatrixD1 y, DMatrix1Row A ) {
          int m = A.numRows;
          int n = A.numCols;
  
          int index = 0;
          if( gamma == 1.0 ) {
              for( int i = 0; i < m; i++ ) {
                  double xdat = x.get(i);
                  for( int j = 0; j < n; j++ ) {
                      A.plus( index++ , xdat*y.get(j) );
                  }
              }
          } else {
              for( int i = 0; i < m; i++ ) {
                  double xdat = x.get(i);
                  for( int j = 0; j < n; j++ ) {
                      A.plus( index++ , gamma*xdat*y.get(j));
                  }
              }
          }
      }
docs: <p>
  Adds to A &isin; &real; <sup>m &times; n</sup> the results of an outer product multiplication
  of the two vectors.  This is also known as a rank 1 update.<br>
  <br>
  A = A + &gamma; x * y<sup>T</sup>
  where x &isin; &real; <sup>m</sup> and y &isin; &real; <sup>n</sup> are vectors.
  </p>
  <p>
  Which is equivalent to: A<sub>ij</sub> = A<sub>ij</sub> + &gamma; x<sub>i</sub>*y<sub>j</sub>
  </p>
  
  <p>
  These functions are often used inside of highly optimized code and therefor sanity checks are
  kept to a minimum.  It is not recommended that any of these functions be used directly.
  </p>
  
  @param gamma A multiplication factor for the outer product.
  @param x A vector with m elements. Not modified.
  @param y A vector with n elements. Not modified.
  @param A A Matrix with m by n elements. Modified.