]> www.ginac.de Git - ginac.git/blobdiff - doc/tutorial/ginac.texi
- fixed a problem where (p\-m*ONE)*(p\-m*ONE) would be automatically simplified
[ginac.git] / doc / tutorial / ginac.texi
index 330e079a5a3f51c9ecc95b714eadfe961481369d..4794837657af188b83c7b9ce68097b2ee01bcb8d 100644 (file)
@@ -3201,6 +3201,42 @@ This function object could then be used like this:
 @}
 @end example
 
+Here is another example for you to meditate over. It removes quadratic
+terms in a variable from an expanded polynomial:
+
+@example
+struct map_rem_quad : public map_function @{
+    ex var;
+    map_rem_quad(const ex & var_) : var(var_) @{@}
+
+    ex operator()(const ex & e)
+    @{
+        if (is_a<add>(e) || is_a<mul>(e))
+           return e.map(*this);
+        else if (is_a<power>(e) && e.op(0).is_equal(var) && e.op(1).info(info_flags::even))
+            return 0;
+        else
+            return e;
+    @}
+@};
+
+...
+
+@{
+    symbol x("x"), y("y");
+
+    ex e;
+    for (int i=0; i<8; i++)
+        e += pow(x, i) * pow(y, 8-i) * (i+1);
+    cout << e << endl;
+     // -> 4*y^5*x^3+5*y^4*x^4+8*y*x^7+7*y^2*x^6+2*y^7*x+6*y^3*x^5+3*y^6*x^2+y^8
+
+    map_rem_quad rem_quad(x);
+    cout << rem_quad(e) << endl;
+     // -> 4*y^5*x^3+8*y*x^7+2*y^7*x+6*y^3*x^5+y^8
+@}
+@end example
+
 @command{ginsh} offers a slightly different implementation of @code{map()}
 that allows applying algebraic functions to operands. The second argument
 to @code{map()} is an expression containing the wildcard @samp{$0} which
@@ -5566,6 +5602,10 @@ and George Labahn, ISBN 0-7923-9259-0, 1992, Kluwer Academic Publishers, Norwell
 J.H. Davenport, Y. Siret, and E. Tournier, ISBN 0-12-204230-1, 1988, 
 Academic Press, London
 
+@item
+@cite{The Art of Computer Programming, Vol 2: Seminumerical Algorithms},
+D.E. Knuth, ISBN 0-201-89684-2, 1998, Addison Wesley
+
 @item
 @cite{The Role of gamma5 in Dimensional Regularization}, D. Kreimer, hep-ph/9401354