001 /*
002 * $Id: ModulElem.java 1708 2008-02-24 17:28:36Z kredel $
003 */
004
005 package edu.jas.structure;
006
007
008 import java.util.List;
009
010
011 /**
012 * Module element interface.
013 * Defines scalar operations.
014 * @param <M> module type
015 * @param <C> scalar type
016 * @author Heinz Kredel
017 */
018 public interface ModulElem<M extends ModulElem<M,C>,
019 C extends RingElem<C>>
020 extends AbelianGroupElem< M > {
021
022 /**
023 * Scalar multiplication. Multiply this by a scalar.
024 * @param s scalar
025 * @return this * s.
026 */
027 public M scalarMultiply(C s);
028
029
030 /**
031 * Linear combination.
032 * @param a scalar
033 * @param b module element
034 * @param s scalar
035 * @return a * b + this * s.
036 */
037 public M linearCombination(C a, M b, C s);
038
039
040 /**
041 * Linear combination.
042 * @param b module element
043 * @param s scalar
044 * @return b + this * s.
045 */
046 public M linearCombination(M b, C s);
047
048
049 /**
050 * Scalar product. Multiply two vectors to become a scalar.
051 * @param b module element
052 * @return this * b, a scalar.
053 */
054 public C scalarProduct(M b);
055
056
057 /**
058 * Scalar product. Multiply this vectors by list of vectors to become a vector.
059 * @param b list of module elements
060 * @return this * b, a list of scalars, a module element.
061 */
062 public M scalarProduct(List<M> b);
063
064 }