1 #ifndef CLASSIC_FVps_CC 
    2 #define CLASSIC_FVps_CC 
   45 template <
class T, 
int N>
 
   51 template <
class T, 
int N>
 
   53     for(
int i = 0; i < N; ++i) data[i] = rhs.
data[i];
 
   57 template <
class T, 
int N>
 
   60     for(
int i = 0; i < N; ++i) {
 
   61         if(rhs[i][0] != 
T(0)) data[i].setMinOrder(0);
 
   62         for(
int j = 0; j <= N; ++j) data[i][j] = rhs[i][j];
 
   67 template <
class T, 
int N>
 
   70     for(
int i = 0; i < N; ++i) {
 
   72         for(
int j = 0; j < 
SIZE; ++j) data[i][j] = rhs[i][j];
 
   77 template <
class T, 
int N>
 
   79     for(
int i = 0; i < N; ++i)
 
   80         data[i] = 
FTps<T, N>(minOrder, maxOrder, trcOrder);
 
   84 template <
class T, 
int N>
 
   87     for(
int i = 0; i < N; ++i)
 
   88         for(
int j = 0; j < N; j++) data[i][j+1] = x(i, j);
 
   92 template <
class T, 
int N>
 
   94     for(
int i = 0; i < N; i++) data[i] = FTps<T, N>(x[i]);
 
   98 template <
class T, 
int N>
 
  103 template <
class T, 
int N>
 
  105     if(&rhs != 
this) 
for(
int i = 0; i < N; ++i) data[i] = rhs.
data[i];
 
  110 template <
class T, 
int N>
 
  112     for(
int i = 0; i < N; ++i) data[i] = FTps<T, N>::makeVariable(i);
 
  116 template <
class T, 
int N>
 
  118     for(
int i = 0; i < N; ++i) data[i] = 
T(0);
 
  122 template <
class T, 
int N>
 
  124     if(index < 0 || index >= N)
 
  125         throw CLRangeError(
"FVps::getComponent()", 
"Index out of range.");
 
  131 template <
class T, 
int N>
 
  133     if(index < 0 || index >= N)
 
  134         throw CLRangeError(
"FVps::setComponent()", 
"Index out of range.");
 
  140 template <
class T, 
int N> 
inline 
  146 template <
class T, 
int N> 
inline 
  152 template <
class T, 
int N>
 
  158 template <
class T, 
int N>
 
  164 template <
class T, 
int N>
 
  174 template <
class T, 
int N>
 
  176     for(
int i = 0; i < N; ++i) data[i].setMinOrder(order);
 
  180 template <
class T, 
int N>
 
  190 template <
class T, 
int N>
 
  192     for(
int i = 0; i < N; ++i) data[i].setMaxOrder(order);
 
  196 template <
class T, 
int N>
 
  206 template <
class T, 
int N>
 
  216 template <
class T, 
int N>
 
  218     for(
int i = 0; i < N; ++i) data[i].setTruncOrder(order);
 
  222 template <
class T, 
int N>
 
  227     for(
int i = 0; i < N; i++)
 
  228         result[i] = data[i].filter(minOrder, maxOrder, trcOrder);
 
  233 template <
class T, 
int N>
 
  235     return filter(0, trunc, trunc);
 
  239 template <
class T, 
int N>
 
  245 template <
class T, 
int N>
 
  248     for(
int i = 0; i < N; i++) result[i] = - data[i];
 
  253 template <
class T, 
int N>
 
  255     for(
int i = 0; i < N; i++) data[i] += rhs[i];
 
  260 template <
class T, 
int N>
 
  262     for(
int i = 0; i < N; i++) data[i] -= rhs[i];
 
  267 template <
class T, 
int N>
 
  269     for(
int i = 0; i < N; i++) data[i] += rhs[i];
 
  274 template <
class T, 
int N>
 
  276     for(
int i = 0; i < N; i++) data[i] -= rhs[i];
 
  281 template <
class T, 
int N>
 
  283     for(
int i = 0; i < N; i++) data[i] *= rhs;
 
  287 template <
class T, 
int N>
 
  291     for(
int i = 0; i < N; ++i) {
 
  312             for(
int j = 0; j < N; ++j) {
 
  314                 if (expons[j] != 0) {
 
  337 template <
class T, 
int N>
 
  340     for(
int i = 0; i < N; i++) data[i] *= t;
 
  345 template <
class T, 
int N>
 
  347     for(
int i = 0; i < N; i++) data[i] *= rhs;
 
  352 template <
class T, 
int N>
 
  354     for(
int i = 0; i < N; i++) data[i] /= rhs;
 
  359 template <
class T, 
int N>
 
  364     int minOrder = getMinOrder(), maxOrder = getMaxOrder(), trcOrder = getTruncOrder();
 
  365     maxOrder = 
std::min(maxOrder, trunc);
 
  366     trcOrder = 
std::min(trcOrder, trunc);
 
  369     if(maxOrder < minOrder) {
 
  370         std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n";
 
  371         throw LogicalError(
"FVps<T,N>::inverse()", 
"Map truncated to a zero map.");
 
  376         std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  377                   << 
"    Cannot invert a purely nonlinear map." << 
std::endl;
 
  379     } 
else if(minOrder == 1) {
 
  381             std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  382                       << 
"    Cannot invert an EXACT nonlinear map." << 
std::endl;
 
  387             std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  388                       << 
"    Cannot invert a constant map." << 
std::endl;
 
  392             std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  393                       << 
"    Cannot invert a nonlinear map containing a constant term." << 
std::endl;
 
  397             std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  398                       << 
"    Cannot invert a map with both constant and linear terms unless it is EXACT." 
  412         std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  413                   << 
"    Cannot invert a map having a singular linear part." << 
std::endl;
 
  419         if(minOrder == 0) r1 -= t1inv * constantTerm();
 
  430     FVps<T, N> T2n = filter(2, maxOrder, trcOrder);
 
  431     for(
int m = 2; m <= trcOrder; ++m) {
 
  433         result = t1inv * (
id - tr);
 
  440 template <
class T, 
int N>
 
  445     int minOrder = getMinOrder(), maxOrder = getMaxOrder(), trcOrder = getTruncOrder();
 
  446     maxOrder = 
std::min(maxOrder, trunc);
 
  447     trcOrder = 
std::min(trcOrder, trunc);
 
  450     if(maxOrder < minOrder) {
 
  451         std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n";
 
  452         throw LogicalError(
"FVps<T,N>::inverse()", 
"Map truncated to a zero map.");
 
  457         std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  458                   << 
"    Cannot invert a purely nonlinear map." << 
std::endl;
 
  460     } 
else if(minOrder == 1) {
 
  462             std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  463                       << 
"    Cannot invert an EXACT nonlinear map." << 
std::endl;
 
  468             std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  469                       << 
"    Cannot invert a constant map." << 
std::endl;
 
  473             std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  474                       << 
"    Cannot invert a nonlinear map containing a constant term." << 
std::endl;
 
  478             std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  479                       << 
"    Cannot invert a map with both constant and linear terms unless it is EXACT." 
  493         std::cerr << 
" <*** ERROR ***> in FVps::inverse():\n" 
  494                   << 
"    Cannot invert a map having a singular linear part." << 
std::endl;
 
  500         if(minOrder == 0) r1 -= t1inv * constantTerm();
 
  511     FVps<T, N> T2n = filter(2, maxOrder, trcOrder);
 
  512     for(
int m = 2; m <= trcOrder; ++m) {
 
  514         result = t1inv * (
id - tr);
 
  515         tr = substitute(result, m);
 
  516         result += t1inv * (
id - tr);
 
  523 template <
class T, 
int N>
 
  526     for(
int i = 0; i < N; i++) result[i] = data[i].derivative(var);
 
  531 template <
class T, 
int N>
 
  534     for(
int i = 0; i < N; i++) result[i] = data[i].integral(var);
 
  539 template <
class T, 
int N>
 
  542     for(
int i = 0; i < N; i++) {
 
  543         if(data[i].getMinOrder() == 0) result[i] = data[i][0];
 
  544         else result[i] = 
T(0);
 
  550 template <
class T, 
int N>
 
  554     for(
int v = N; v-- > 0;)
 
  555         result[v] = (*
this)[v].evaluate(P);
 
  560 template <
class T, 
int N>
 
  563     for(
int i = 0; i < N; i++)
 
  564         for(
int j = 0; j < N; j++) 
result(i, j) = data[i][j+1];
 
  569 template <
class T, 
int N>
 
  572     int maxOrder = getMaxOrder();
 
  573     if(maxOrder) --maxOrder;
 
  578     for(
int i = 0; i < N; ++i) {
 
  579         for(
int j = 0; j < N; ++j) {
 
  583             T *dk = gzij.
begin() + ks, *mk = m + ks, *mke = m + ke;
 
  585             while(mk != mke) rij += *dk++ * *mk++;
 
  593 template <
class T, 
int N>
 
  599     ordersL[0] = getMinOrder(),     ordersL[1] = getMaxOrder(),     ordersL[2] = getTruncOrder();
 
  607 template <
class T, 
int N>
 
  612                            "Transformation order, n, is negative.");
 
  615                            "Transformation order, n, exceeds globalTruncOrder.");
 
  619     int minOrder = getMinOrder(), maxOrder = getMaxOrder(), trcOrder = getTruncOrder();
 
  620     for(
int k = N; k-- > 0;) {
 
  621         if(f[k].getMinOrder()   != minOrder) f[k].
setMinOrder(minOrder);
 
  622         if(f[k].getMaxOrder()   != maxOrder) f[k].
setMaxOrder(maxOrder);
 
  623         if(f[k].getTruncOrder() != trcOrder) f[k].
setTruncOrder(trcOrder);
 
  628     for(
int k = N; k-- > 0;)
 
  634         std::cerr << 
" <*** WARNING ***> from FTps<T,N>::substitute(mat,n):\n" 
  635                   << 
"    Transformation order exceeds truncation order;\n" 
  636                   << 
"    returning map unchanged." << 
std::endl;
 
  640     if(n == 0 || n < minOrder || maxOrder < n) 
return result;
 
  645     static int max_n = -1;
 
  658     for(
int k = N; k-- > 0;) {
 
  659         fj[k] = f[k].begin(n);
 
  660         g[k] = result[k].begin();
 
  661         std::fill(g[k] + start_n, g[k] + end_n, 
T(0));
 
  665     for(
int j = start_n; j < end_n; ++j) {
 
  668         for(
int k = N; k-- > 0;)
 
  669             if(*fj[k] != 
T(0)) zeroQ = 
false;
 
  671             for(
int k = N; k-- > 0;) ++fj[k];
 
  679             while((*vrbl)[vi] == (*oldvrbl)[vi]) ++vi;
 
  686             mv = mat[(*vrbl)[0]];
 
  700             mv = mat[(*vrbl)[ord1]];  
 
  701             for(
int k = 0; k < N; k++) {
 
  703                 if(mvk == 
T(0)) 
continue;
 
  705                 for(
int l = start_l; l < end_l; l++) t[prod[l]] += mvk * t[l];
 
  710         for(
int k = N; k-- > 0;) {
 
  714                 for(
int i = start_n; i < end_n; i++) gk[i] += fjk * t[i];
 
  720         for(
int k = N; k-- > 0;) ++fj[k];
 
  727 template <
class T, 
int N>
 
  732                            "Inconsistent transformation orders: nl > nh.");
 
  735                            "Transformation order nl is negative.");
 
  738                            "Transformation order nh exceeds globalTruncOrder.");
 
  742     int minOrder = getMinOrder(), maxOrder = getMaxOrder(), trcOrder = getTruncOrder();
 
  743     for(
int k = N; k-- > 0;) {
 
  744         if(f[k].getMinOrder()   != minOrder) f[k].
setMinOrder(minOrder);
 
  745         if(f[k].getMaxOrder()   != maxOrder) f[k].
setMaxOrder(maxOrder);
 
  746         if(f[k].getTruncOrder() != trcOrder) f[k].
setTruncOrder(trcOrder);
 
  751     for(
int k = N; k-- > 0;)
 
  756         std::cerr << 
" <*** WARNING ***> from FVps<T,N>::substitute(mat,nl,nh):\n" 
  757                   << 
"    Transformation order nh exceeds truncation order;\n" 
  758                   << 
"    truncation order unchanged." << 
std::endl;
 
  763     if(nh == 0 || nh < minOrder || maxOrder < nl) 
return result;
 
  769     for(
int k = N; k-- > 0;)
 
  770         std::fill(result[k].
begin(nl), result[k].
end(nh), 
T(0));
 
  775     static int max_nh = -1;
 
  786     const T *fp[N][nh+1];
 
  788     for(
int k = N; k-- > 0;) {
 
  789         for(
int m = nl; m <= nh; ++m) fp[k][m] = f[k].
begin(m);
 
  790         g[k] = result[k].begin();
 
  794     int nh1 = nh - 1, nh2 = nh - 2;
 
  797     for(
int j = start_nh; j < end_nh; ++j) {
 
  802             while((*vrbl)[vk] == (*oldvrbl)[vk]) ++vk;
 
  805         int jl = (*vrbl)[nh1], ni = nh2;
 
  806         while(ni >= 0 && (*vrbl)[ni] == jl) --ni;
 
  813             for(
int k = N; k-- > 0;) {
 
  814                 if(*fp[k][n1] != 
T(0)) {
 
  824             for(
int k = N; k-- > 0;) {
 
  825                 if(*fp[k][n2] != 
T(0)) {
 
  835             for(
int k = N; k-- > 0;)
 
  836                 for(
int m = ni; m <= nh; ++m) ++fp[k][m];
 
  845             mv = mat[(*vrbl)[0]];
 
  860             mv = mat[(*vrbl)[ord1]];  
 
  861             for(
int k = 0; k < N; k++) {
 
  863                 if(mvk == 
T(0)) 
continue;
 
  865                 for(
int l = start_l; l < end_l; ++l) t[prod[l]] += mvk * t[l];
 
  871         for(
int k = N; k-- > 0;) {
 
  872             for(
int m = n1; m <= n2; ++m) {
 
  873                 const T fkj = *fp[k][m];
 
  875                 for(
int i = start_m; i < end_m; i++) g[k][i] += fkj * t[i];
 
  877             for(
int m = ni; m <= nh; ++m) ++fp[k][m];
 
  888 template <
class T, 
int N>
 
  890     return substitute(mat, getMinOrder(), getMaxOrder());
 
  894 template <
class T, 
int N>
 
  900     int f_min = getMinOrder(), f_max = getMaxOrder(), f_trc = getTruncOrder();
 
  902     int g_min = orders[0], g_max = orders[1], g_trc = orders[2];
 
  903     for(
int k = N; k-- > 0;) {
 
  904         if(f[k].getMinOrder()   != f_min) f[k].
setMinOrder(f_min);
 
  905         if(f[k].getMaxOrder()   != f_max) f[k].
setMaxOrder(f_max);
 
  911         throw LogicalError(
"FVps::substitute(FVps rhs, int trunc)",
 
  912                            "Truncation order exceeds globalTruncOrder!");
 
  915     if(g_min > g_max) 
return FVps<T, N>(g_trc, g_trc, g_trc);
 
  920         for(
int k = N; k-- > 0;) result[k][0] = *f[k].
begin();
 
  921     if(f_max == 0) 
return result;
 
  924     int nl = f_min, nh = f_max;
 
  928     const T *fp[N][nh+1];
 
  934     for(
int k = N; k-- > 0;)
 
  935         for(
int m = nl; m <= nh; ++m) fp[k][m] = f[k].
begin(m);
 
  938     int nh1 = nh - 1, nh2 = nh - 2;
 
  941     for(
int j = start_nh; j < end_nh; ++j) {
 
  946             while((*vrbl)[vk] == (*oldvrbl)[vk]) ++vk;
 
  949         int jl = (*vrbl)[nh1], ni = nh2;
 
  950         while(ni >= 0 && (*vrbl)[ni] == jl) --ni;
 
  957             for(
int k = N; k-- > 0;) {
 
  958                 if(*fp[k][n1] != 
T(0)) {
 
  968             for(
int k = N; k-- > 0;) {
 
  969                 if(*fp[k][n2] != 
T(0)) {
 
  979             for(
int k = N; k-- > 0;)
 
  980                 for(
int m = ni; m <= nh; ++m) ++fp[k][m];
 
  988             t[1] = rhs[(*vrbl)[0]];
 
  998             t[ord] = t[ord1].multiply(rhs[(*vrbl)[ord1]], g_trc);
 
 1004         for(
int k = N; k-- > 0;) {
 
 1005             const T **fpk = fp[k];
 
 1006             for(
int m = n1; m <= n2; ++m) result[k] += *fpk[m] * t[m];
 
 1007             for(
int m = ni; m <= nh; ++m) ++fpk[m];
 
 1020 template <
class T, 
int N>
 
 1024     for(
int i = 0; i < N; ++i) {
 
 1026         for(
int j = 1; j < N; ++j) sum += lhs(i, j) * data[j];
 
 1033 template <
class T, 
int N>
 
 1037     if ( std::any_of(power.
begin(), power.
end(), [&](
int p) { 
return p < 0; }) )
 
 1038         throw LogicalError(
"FVps<T,N>::getFTps(power)", 
"Negative power.");
 
 1044     for (
int i = 0; i < N; ++i) {
 
 1049         for (
int j = 0; j < power[i]; ++j)
 
 1056 template <
class T, 
int N>
 
 1058     is.flags(std::ios::skipws);
 
 1060     (is >> std::ws).
get(head, 4);
 
 1062     if(strcmp(head, 
"FVps") != 0)
 
 1063         throw FormatError(
"FVps::get()", 
"Flag word \"FVps\" missing.");
 
 1067     if(nDim != N) 
throw FormatError(
"FVps::get()", 
"Invalid FVps dimension");
 
 1071     for(
int i = 0; i < N; i++) is >> result.
data[i];
 
 1077 template <
class T, 
int N>
 
 1080     for(
int i = 0; i < N; i++) os << data[i];
 
 1088 template <
class T, 
int N>
 
 1091     for(
int i = 0; i < N; ++i) result[i] = lhs[i] + rhs[i];
 
 1096 template <
class T, 
int N>
 
 1099     for(
int i = 0; i < N; ++i) result[i] = lhs[i] - rhs[i];
 
 1104 template <
class T, 
int N>
 
 1107     for(
int i = 0; i < N; ++i) result[i] = lhs[i] + rhs[i];
 
 1112 template <
class T, 
int N>
 
 1115     for(
int i = 0; i < N; ++i) result[i] = lhs[i] - rhs[i];
 
 1120 template <
class T, 
int N>
 
 1123     for(
int i = 0; i < N; ++i) result[i] = lhs[i] + rhs[i];
 
 1128 template <
class T, 
int N>
 
 1131     for(
int i = 0; i < N; ++i) result[i] = lhs[i] - rhs[i];
 
 1136 template <
class T, 
int N>
 
 1139     for (
int i = 0; i < N; ++i) {
 
 1147 template <
class T, 
int N>
 
 1150     for(
int i = 0; i < N; ++i) result[i] = lhs[i] * rhs;
 
 1155 template <
class T, 
int N>
 
 1158     for(
int i = 0; i < N; ++i) result[i] = lhs * rhs[i];
 
 1163 template <
class T, 
int N>
 
 1166     for(
int i = 0; i < N; ++i) result[i] = lhs[i] * rhs;
 
 1171 template <
class T, 
int N>
 
 1174     for(
int i = 0; i < N; ++i) result[i] = lhs * rhs[i];
 
 1178 template <
class T, 
int N>
 
 1184 template <
class T, 
int N>
 
 1187     for(
int i = 0; i < N; ++i) result[i] = lhs[i] / rhs;
 
 1192 template <
class T, 
int N>
 
 1195     for(
int i = 0; i < N; ++i) result[i] = lhs[i] / rhs;
 
 1206     const int MAX_ITER = 400;
 
 1213 #ifdef DEBUG_FVps_CC 
 1214         std::cerr << 
" <*** WARNING ***> from ExpMap(H,map,trunc):\n" 
 1215                   << 
"    Incomplete computation of feed-down terms.\n" << 
std::endl;
 
 1222     for(
int i = 0; i < N; i += 2) {
 
 1231     for(
int var = 0; var < N; var++) {
 
 1237         for(
int k = 1; expHf != old; ++k) {
 
 1239                 std::cerr << 
" present error:\n" << expHf - old << 
std::endl;
 
 1241                                        "No convergence in ExpMap(H,map)");
 
 1248             for(
int v = 1; v < N; ++v) {
 
 1251                 dHk1f += dH[v].
multiply(ddHkf, trunc);
 
 1254             dHkf = dHk1f / 
T(k); 
 
 1257         expHmap[var] = expHf;
 
 1268     for(
int v = 0; v < N; ++v)
 
 1274 template <
class T, 
int N>
 
 1280 template <
class T, 
int N>
 
 1281 std::ostream &operator<<(std::ostream &os, const FVps<T, N> &vps) {
 
 1285 #endif // CLASSIC_FVps_CC 
A templated representation for vectors. 
 
Singular matrix exception. 
 
T evaluate(const FVector< T, N > &) const 
Evaluate FTps at point. 
 
void setMinOrder(int order)
Set minimum order. 
 
Linear map with values of type [b]T[/b] in [b]N[/b] variables. 
 
and give any other recipients of the Program a copy of this License along with the Program You may charge a fee for the physical act of transferring a copy
 
FVps inverse(int trunc=(FTps< T, N >::EXACT)) const 
Inverse. 
 
void setComponent(int, const FTps< T, N > &)
Set component. 
 
int getVariables() const 
Get number of variables. 
 
FVps operator*(const FVps< T, N > &rhs) const 
Multiply. 
 
and that you know you can do these things To protect your we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights These restrictions translate to certain responsibilities for you if you distribute copies of the or if you modify it For if you distribute copies of such a whether gratis or for a you must give the recipients all the rights that you have You must make sure that receive or can get the source code And you must show them these terms so they know their rights We protect your rights with two distribute and or modify the software for each author s protection and we want to make certain that everyone understands that there is no warranty for this free software If the software is modified by someone else and passed we want its recipients to know that what they have is not the so that any problems introduced by others will not reflect on the original authors reputations any free program is threatened constantly by software patents We wish to avoid the danger that redistributors of a free program will individually obtain patent in effect making the program proprietary To prevent we have made it clear that any patent must be licensed for everyone s free use or not licensed at all The precise terms and conditions for distribution and modification follow GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR DISTRIBUTION AND MODIFICATION This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License The refers to any such program or and a work based on the Program means either the Program or any derivative work under copyright a work containing the Program or a portion of it
 
FVps truncate(int trunc)
Truncate. 
 
Array1D< int > getSubstOrders(const FVps< T, N > &rhs, int trunc=EXACT) const 
Return orders {min, max, trc} of f(rhs(z)). 
 
void setTruncOrder(int order)
Set truncation order. 
 
Truncated power series in N variables of type T. 
 
FVps operator-() const 
Unary minus. 
 
const FVps & operator=(const FVps &)
 
FVps filter(int minOrder, int maxOrder, int trcOrder=(FTps< T, N >::EXACT)) const 
Extract given range of orders, with truncation. 
 
Matrix< T > operator-(const Matrix< T > &, const Matrix< T > &)
Matrix subtraction. 
 
FVps & operator*=(const FTps< T, N > &rhs)
Multiply and assign. 
 
const FTps< T, N > & operator[](int) const 
Get Component. 
 
T * begin() const 
Return beginning of monomial array. 
 
FVps & operator-=(const FVps &rhs)
Subtract and assign. 
 
FTps multiply(const FTps &y, int trunc=EXACT) const 
Multiplication. 
 
static int getGlobalTruncOrder()
Return the global truncation order. 
 
std::list< int > getListOfNonzeroCoefficients() const 
Get a list containing the indexes of non-zero coefficients of a FTps. 
 
A templated representation of a LU-decomposition. 
 
const T getCoefficient(int index) const 
Get coefficient. 
 
Matrix< T > operator*(const Matrix< T > &, const Matrix< T > &)
Matrix multiply. 
 
int getTruncOrder() const 
Get truncation order. 
 
clearpage the user may choose between constant or variable radius This model includes fringe fields begin
 
static Array1D< T > evalMonoms(const FVector< T, N > &, int)
Evaluate monomials at point. 
 
Inform & endl(Inform &inf)
 
Transport map with values of type [b]T[/b] in [b]N[/b] variables. 
 
FTps inverse(int trunc=EXACT) const 
Reciprocal, 1/(*this). 
 
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
 
T::PETE_Expr_t::PETE_Return_t max(const PETE_Expr< T > &expr, NDIndex< D > &loc)
 
static int orderStart(int order)
Get index at which [b]order[/b] starts. 
 
FVps integral(int var) const 
Partial integral. 
 
std::string::iterator iterator
 
FVps derivative(int var) const 
Partial derivative. 
 
int getMaxOrder() const 
Get highest order contained in any component. 
 
void setMinOrder(int order)
Set minimum order. 
 
Convergence error exception. 
 
FVps substitute(const FMatrix< T, N, N > &M, int n) const 
Substitute. 
 
FVps< T, N > ExpMap(const FTps< T, N > &H, int trunc=FTps< T, N >::EXACT)
Build the exponential series. 
 
T::PETE_Expr_t::PETE_Return_t sum(const PETE_Expr< T > &expr)
 
int getMinOrder() const 
Get minimum order. 
 
static int getSize(int order)
 
int getMinOrder() const 
Get lowest order contained in any component. 
 
T::PETE_Expr_t::PETE_Return_t prod(const PETE_Expr< T > &expr)
 
FVps & operator+=(const FVps &rhs)
Add and assign. 
 
iterator begin()
Get beginning of data. 
 
iterator end()
Get iterator pointing past end of array. 
 
Matrix< T > operator+(const Matrix< T > &, const Matrix< T > &)
Matrix addition. 
 
FTps< T, N > makePower(int power) const 
Multiply FTps with itself. 
 
FMatrix< T, N, N > linearTerms() const 
Extract the linear part of the map. 
 
Array1D< int > getSubstOrders(const FVps< T, N > &rhs, int trunc=(FTps< T, N >::EXACT)) const 
Return orders {min, max, trc} of f(rhs(z)). 
 
int getSize() const 
Get total number of coefficients. 
 
FVps operator+() const 
Unary plus. 
 
void setTruncOrder(int order)
Set truncation order for all components. 
 
Vector truncated power series in n variables. 
 
const FTps< T, N > & getComponent(int n) const 
Get component. 
 
int getTopOrder() const 
Get highest order contained in any component. 
 
FVps myInverse(int trunc=(FTps< T, N >::EXACT)) const 
Inverse. 
 
FMatrix< T, N, N > inverse() const 
Get inverse. 
 
FTps derivative(int var) const 
Partial derivative. 
 
static const Array1D< int > & getVariableList(int index)
 
std::istream & get(std::istream &is)
Get a FVps from stream [b]is[/b]. 
 
int getTruncOrder() const 
Get lowest truncation order in any component. 
 
FArray1D< int, N > extractExponents(int index) const 
Extract exponents of coefficient. 
 
b mention the algorithm in the References section The appropriate citation is
 
FVps & operator/=(const FTps< T, N > &rhs)
Divide and assign. 
 
FLieGenerator< T, N > PoissonBracket(const FLieGenerator< T, N > &, const FLieGenerator< T, N > &)
Poisson bracket of two Lie generators. 
 
int getMaxOrder() const 
Get maximum order. 
 
std::istream & operator>>(std::istream &, Tps< T > &x)
Extract from stream. 
 
void identity()
Set to identity. 
 
int getDimension() const 
Get dimension. 
 
static int orderEnd(int order)
Get one plus index at which [b]order[/b] ends. 
 
void setMaxOrder(int order)
Set maximum order. 
 
Matrix< T > operator/(const Matrix< T > &, const T &)
Matrix divided by scalar. 
 
FVector< T, N > constantTerm() const 
Extract the constant part of the map. 
 
FTps< T, N > getFTps(const FArray1D< int, N > &power) const 
Get a FTps that is a combination of the polynomials of FVps. 
 
static const Array1D< int > & getProductArray(int index)
 
FVps substituteInto(const FMatrix< T, N, N > &lhs) const 
Substitute map into matrix. 
 
iterator begin()
Get iterator pointing to beginning of array. 
 
std::ostream & put(std::ostream &os) const 
Put a FVps to stream [b]os[/b].