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 }