code: public static void inverseUpdate( DMatrixRMaj H , DMatrixRMaj s , DMatrixRMaj y ,
  									  DMatrixRMaj tempV0, DMatrixRMaj tempV1)
  	{
  		double alpha = VectorVectorMult_DDRM.innerProdA(y,H,y);
  		double p = 1.0/VectorVectorMult_DDRM.innerProd(s,y);
  
  		CommonOps_DDRM.mult(H,y,tempV0);
  		CommonOps_DDRM.multTransA(y, H, tempV1);
  
  		VectorVectorMult_DDRM.rank1Update(-p, H , tempV0, s);
  		VectorVectorMult_DDRM.rank1Update(-p, H , s, tempV1);
  		VectorVectorMult_DDRM.rank1Update(p*alpha*p+p, H , s, s);
  	}
docs: BFGS inverse hessian update equation that orders the multiplications to minimize the number of operations.
  
  @param H symmetric inverse matrix being updated
  @param s change in state
  @param y change in gradient
  @param tempV0 Storage vector of length N
  @param tempV1 Storage vector of length N