/****************************************************************************
Copyright (c) 2003, Landmark Graphics and others. All rights reserved.
This program and accompanying materials are made available under the terms of
the Common Public License - v1.0, which accompanies this distribution, and is
available at http://www.eclipse.org/legal/cpl-v10.html
****************************************************************************/
package com.lgc.wsh.opt;

/** Define a second-order quadratic operation on a Vector
    0.5 x'Hx + b'x
    where H is a positive semidefinite quadratic and b is a
    linear gradient.

    @author W.S. Harlan
*/
public interface Quadratic {
  /** Multiply vector by the quadratic Hessian H.
      Perform the operation in-place.
      @param x Vector to be multiplied and modified.
   */
  public void multiplyHessian(Vect x);

  /** Multiply vector by an approximate inverse of the Hessian.
      Perform the operation in-place.  This method is
      useful to speed convergence.
      An empty implementation is equivalent to an identity.
      @param x Vector to be multiplied and modified.
   */
  public void inverseHessian(Vect x);

  /** Get the linear gradient term b of the quadratic expression.
      The recipient receives a unique copy that must be disposed.
      @return The vector b where the quadratic is x'Hx + b'x
  */
  public Vect getB();

}
