1 #ifndef CLASSIC_LinearFun_CC 
    2 #define CLASSIC_LinearFun_CC 
   38 template <
class T, 
int N>
 
   40     for(
int i = 0; i <= N; ++i) data[i] = 0.0;
 
   44 template <
class T, 
int N>
 
   47     for(
int i = 1; i <= N; ++i) data[i] = 0.0;
 
   51 template <
class T, 
int N>
 
   54     for(
int i = 1; i <= N; ++i) data[i] = 0.0;
 
   58 template <
class T, 
int N>
 
   61     for(
int i = 1; i <= N; ++i) data[i] = 0.0;
 
   66 template <
class T, 
int N>
 
   68     return (index > N) ? 
T(0) : data[index];
 
   72 template <
class T, 
int N>
 
   74     if(index <= N) data[index] = value;
 
   78 template <
class T, 
int N> 
inline 
   84 template <
class T, 
int N> 
inline 
   90 template <
class T, 
int N>
 
   93     for(
int i = 0; i <= N; ++i) z.
data[i] = 0.0;
 
   99 template <
class T, 
int N> 
inline 
  105 template <
class T, 
int N>
 
  108     for(
int i = 0; i <= N; ++i) z.
data[i] = - data[i];
 
  113 template <
class T, 
int N>
 
  115     for(
int i = 0; i <= N; ++i) data[i] += rhs.
data[i];
 
  120 template <
class T, 
int N>
 
  122     for(
int i = 0; i <= N; ++i) data[i] -= rhs.
data[i];
 
  127 template <
class T, 
int N>
 
  129     return *
this = multiply(rhs);
 
  133 template <
class T, 
int N>
 
  136     T div = 
T(1) / rhs.
data[0];
 
  139     for(
int i = 1; i <= N; ++i) {
 
  140         data[i] = (data[i] - data[0] * rhs.
data[i]) * div;
 
  147 template <
class T, 
int N> 
inline 
  154 template <
class T, 
int N> 
inline 
  161 template <
class T, 
int N>
 
  163     for(
int i = 0; i <= N; ++i) data[i] *= rhs;
 
  168 template <
class T, 
int N>
 
  170     if(rhs == 
T(0)) 
throw DivideError(
"LinearFun::operator/=()");
 
  171     for(
int i = 0; i <= N; ++i) data[i] /= rhs;
 
  176 template <
class T, 
int N>
 
  178     for(
int i = 0; i <= N; ++i) {
 
  179         if(data[i] != rhs.
data[i]) 
return false;
 
  186 template <
class T, 
int N>
 
  188     if(data[0] != rhs) 
return false;
 
  190     for(
int i = 1; i <= N; ++i) {
 
  191         if(data[i] != 
T(0)) 
return false;
 
  198 template <
class T, 
int N> 
inline 
  200     return !(*
this == rhs);
 
  204 template <
class T, 
int N> 
inline 
  206     return !(*
this == rhs);
 
  210 template <
class T, 
int N>
 
  213     if(aZero == 
T(0)) 
throw DivideError(
"LinearFun::inverse()");
 
  215     z.
data[0] = 
T(1) / aZero;
 
  217     for(
int i = 1; i <= N; ++i) {
 
  218         z.
data[i] = - data[i] * data[i] * z.
data[0];
 
  230     for(
int i = 1; i <= N; ++i) {
 
  231         z.
data[i] = data[0] * rhs.
data[i] + data[i] * rhs.
data[0];
 
  238 template <
class T, 
int N>
 
  241     for(
int i = 0; i < N; ++i) z += data[i+1] * rhs[i];
 
  246 template <
class T, 
int N>
 
  251     for(
int i = 0; i < N; ++i) {
 
  252         for(
int j = 0; j < N; ++i) {
 
  253             z.
data[i+1] += data[j+1] * M[j][i];
 
  261 template <
class T, 
int N>
 
  266     for(
int i = 0; i <= N; ++i) {
 
  267         for(
int j = 0; j < N; ++i) {
 
  268             z.
data[i] += data[j] * m[j][i];
 
  276 template <
class T, 
int N>
 
  279     z.
data[0] = series[0];
 
  281     for(
int i = 1; i <= N; ++i) {
 
  282         z.
data[i] = series[1] * data[i];
 
  289 template <
class T, 
int N>
 
  291     is.flags(std::ios::skipws);
 
  295     if(strcmp(head, 
"LinearFun") != 0) {
 
  296         throw FormatError(
"LinearFun::get()", 
"Flag word \"Tps\" missing.");
 
  299     int maxOrder, truncOrder, nVar;
 
  300     is >> maxOrder >> truncOrder >> nVar;
 
  303         throw FormatError(
"LinearFun::get()", 
"Invalid number of variables.");
 
  317         for(
int var = 0; var < N; var++) {
 
  331         if(fail) 
throw FormatError(
"LinearFun::get()", 
"File read error");
 
  333         if(order <= 1  &&  coeff != 
T(0)) {
 
  334             z.
data[index] = coeff;
 
  342 template <
class T, 
int N>
 
  344     os << 
"LinearFun " << 1 << 
' ' << 1 << 
' ' << N << 
std::endl;
 
  346     os.setf(std::ios::scientific, std::ios::floatfield);
 
  348     for(
int i = 0; i <= N; i++) {
 
  349         if(data[i] != 
T(0)) {
 
  350             os << std::setw(24) << data[i];
 
  352             for(
int v = 1; v <= N; ++v) {
 
  353                 os << std::setw(3) << (v == i ? 1 : 0);
 
  360     os << std::setw(24) << 
T(0);
 
  362     for(
int v = 0; v < N; v++) {
 
  363         os << std::setw(3) << (-1);
 
  367     os.
setf(std::ios::fixed, std::ios::floatfield);
 
  375 template <
class T, 
int N> 
inline 
  382 template <
class T, 
int N> 
inline 
  389 template <
class T, 
int N> 
inline 
  396 template <
class T, 
int N> 
inline 
  403 template <
class T, 
int N> 
inline 
  410 template <
class T, 
int N> 
inline 
  417 template <
class T, 
int N> 
inline 
  423 template <
class T, 
int N> 
inline 
  429 template <
class T, 
int N> 
inline 
  436 template <
class T, 
int N> 
inline 
  443 template <
class T, 
int N> 
inline 
  450 template <
class T, 
int N> 
inline 
  456 template <
class T, 
int N> 
inline 
  462 template <
class T, 
int N> 
inline 
  468 template <
class T, 
int N> 
inline 
  474 template <
class T, 
int N> 
inline 
  475 std::ostream &operator<<(std::ostream &os, const LinearFun<T, N> &tps) {
 
  479 #endif // CLASSIC_LinearFun_CC 
Matrix< T > operator+(const Matrix< T > &, const Matrix< T > &)
Matrix addition. 
Matrix< T > operator/(const Matrix< T > &, const T &)
Matrix divided by scalar. 
LinearFun operator+() const 
Unary plus. 
std::ostream & put(std::ostream &os) const 
Write LinearFun on the stream [b]os[/b]. 
LinearFun taylor(const T series[2]) const 
Taylor series. 
LinearFun multiply(const LinearFun &y) const 
Multiplication truncated to order one. 
A templated representation for vectors. 
LinearFun inverse() const 
Approximate reciprocal value 1/(*this). 
Matrix< T > operator*(const Matrix< T > &, const Matrix< T > &)
Matrix multiply. 
LinearFun & operator/=(const LinearFun &y)
Approximate division and assignation. 
LinearFun & operator+=(const LinearFun &y)
Add and assign. 
FmtFlags_t setf(FmtFlags_t setbits, FmtFlags_t field)
const T operator[](int index) const 
Get coefficient. 
static LinearFun makeVariable(int var)
Make variable. 
LinearFun< T, N > substitute(const LinearMap< T, N > &m) const 
Substitute. 
std::istream & get(std::istream &is)
Read LinearFun on the stream [b]is[/b]. 
void setCoefficient(int index, const T &value)
Set coefficient. 
Linear map with values of type [b]T[/b] in [b]N[/b] variables. 
LinearFun & operator*=(const LinearFun &y)
Multiply and assign. 
LinearFun & operator=(const T &y)
Convert and assign. 
bool operator!=(const Offset &off1, const Offset &off2)
bool operator!=(const LinearFun &y) const 
Inequality operator. 
LinearFun()
Default constructor. 
T data[N+1]
Representation. 
T evaluate(const FVector< T, N > &) const 
Evaluate LinearFun at point. 
bool operator==(const LinearFun &y) const 
Equality operator. 
LinearFun & operator-=(const LinearFun &y)
Subtract and assign. 
Linear function in N variables of type T. 
Matrix< T > operator-(const Matrix< T > &, const Matrix< T > &)
Matrix subtraction. 
const T getCoefficient(int index) const 
Get coefficient. 
LinearFun operator-() const 
Unary minus. 
std::istream & operator>>(std::istream &, LieMap< T > &x)
Extract LieMap<T> from stream. 
Inform & endl(Inform &inf)
bool operator==(const TwoPolynomial &left, const TwoPolynomial &right)