001/*
002 * $Id$
003 */
004
005package edu.jas.ps;
006
007
008import java.util.List;
009
010import edu.jas.poly.ExpVector;
011import edu.jas.structure.RingElem;
012
013
014/**
015 * Interface for functions capable for Taylor series expansion.
016 * @param <C> ring element type
017 * @author Heinz Kredel
018 */
019
020public interface TaylorFunction<C extends RingElem<C>> {
021
022
023    /**
024     * Get the factorial coefficient.
025     * @return factorial coefficient.
026     */
027    public long getFacul();
028
029
030    /**
031     * Test if this is zero.
032     * @return true if this is 0, else false.
033     */
034    public boolean isZERO();
035
036
037    /**
038     * Derivative.
039     * @return derivative of this.
040     */
041    public TaylorFunction<C> derivative();
042
043
044    /**
045     * Multi-partial derivative.
046     * @param i exponent vector.
047     * @return partial derivative of this with respect to all variables.
048     */
049    public TaylorFunction<C> derivative(ExpVector i);
050
051
052    /**
053     * Evaluate.
054     * @param a element.
055     * @return this(a).
056     */
057    public C evaluate(C a);
058
059
060    /**
061     * Evaluate at a tuple of elements.
062     * @param a tuple of elements.
063     * @return this(a).
064     */
065    public C evaluate(List<C> a);
066
067}