package DE;
 
/**
 * A parameter of a model to be fit for.  This is a generalized form of a
 * parameter and may be multi-dimensional.  The only condition is that some
 * sense of linear combination be possible with the parameter.
 * Written by Chris Studholme
 * Licenced for redistribution under the GNU General Public Licence
 */
public interface Parameter {
 
    /* Scale and add to another parameter (which may be scaled too).  This
     * method should always return a new instance of the parameter and the
     * current instance should not be altered by this call.  The returned
     * value can be thought of as factor*this + otherfactor*other.  If other
     * is null, then it is thought of as zero and otherfactor is ignored.
     * @param factor scale factor for this parameter
     * @param other parameter to add (can be null)
     * @param otherfactor scale factor for other
     * @return a new parameter
     */
    public Parameter scaleadd(double factor, 
			      Parameter other, 
			      double otherfactor);
}
