SymbolicC++ is a general purpose computer algebra system written in the programming language C++. It is free software released under the terms of the GNU General Public License. SymbolicC++ is used by including a C++ header file or by linking against a library.
Examples import "symbolicc++.h";
import std;
using namespace std;
int main() { Symbolic x("x"); std::println("{}", integrate(x+1, x)); // => 1/2*x^(2)+x Symbolic y("y"); std::println("{}", df(y, x)); // => 0 std::println("{}", df(y[x], x)); // => df(y[x],x) std::println("{}", df(std::exp(std::cos(y[x])), x)); // => -sin(y[x])*df(y[x],x)*e^cos(y[x]) return 0; }
The following program fragment inverts the matrix
symbolically.
Symbolic theta("theta"); Symbolic r = { { std::cos(theta), std::sin(theta) }, { -std::sin(theta), std::cos(theta) } }; std::println(r(0, 1)); // sin(theta) Symbolic rInv = r.inverse(); std::println(rInv[ (std::cos(theta) ^ 2) == 1 - (std::sin(theta) ^ 2) ]);
The output is
[ cos(theta) −sin(theta) ] [ sin(theta) cos(theta) ]
The next program illustrates non-commutative symbols in SymbolicC++. Here b is a Bose annihilation operator and bd is a Bose creation operator. The variable vs denotes the vacuum state . The ~ operator toggles the commutativity of a variable, i.e. if b is commutative that ~b is non-commutative and if b is non-commutative ~b is commutative.
import "symbolicc++.h"; import std;
int main() { // The operator b is the annihilation operator and bd is the creation operator Symbolic b("b"); Symbolic bd("bd"); Symbolic vs("vs");
b = ~b; bd = ~bd; vs = ~vs;
Equations rules = (b * bd == bd * b + 1, b * vs == 0);
// Example 1 Symbolic result1 = b * bd * b *bd; std::println("result1 = {}", result1.subst_all(rules)); std::println("result1 * vs = {}", (result1 * vs).subst_all(rules));
// Example 2 Symbolic result2 = (b + bd) ^ 4; std::println("result2 = {}", result2.subst_all(rules)); std::println("result2 * vs = {}", (result2 * vs).subst_all(rules));
return 0; }
Further examples can be found in the books listed below.Steeb, W.-H. (2010). Quantum Mechanics Using Computer Algebra, second edition, World Scientific Publishing, Singapore.Steeb, W.-H. (2008). The Nonlinear Workbook: Chaos, Fractals, Cellular Automata, Neural Networks, Genetic Algorithm, Gene Expression Programming, Wavelets, Fuzzy Logic with C++, Java and SymbolicC++ Programs, fourth edition, World Scientific Publishing, Singapore.Steeb, W.-H. (2007). Continuous Symmetries, Lie Algebras, Differential Equations and Computer Algebra, second edition, World Scientific Publishing, Singapore.
History SymbolicC++ is described in a series of books on computer algebra. The first bookTan Kiat Shi and Steeb, W.-H. (1997). SymbolicC++: An introduction to Computer Algebra Using Object-Oriented Programming Springer-Verlag, Singapore. described the first version of SymbolicC++. In this version the main data type for symbolic computation was the Sum class. The list of available classes included
Verylong: An unbounded integer implementation (like BigInteger) Rational: A template class for rational numbers Quaternion: A template class for quaternions Derive: A template class for automatic differentiation Vector: A template class for vectors (see vector space) Matrix: A template class for matrices (see matrix (mathematics)) Sum: A template class for symbolic expressions
Example: import "rational.h"; import "msymbol.h"; import std;
int main(void) { Sum<int> x("x", 1); Sum<Rational<int>> y("y", 1); std::println("{}", Int(y, y)); // => 1/2 yˆ2 y.depend(x); std::println("{}", df(y, x)); // => df(y,x) return 0; }
The second versionTan Kiat Shi, Steeb, W.-H. and Hardy, Y (2000). SymbolicC++: An Introduction to Computer Algebra using Object-Oriented Programming, 2nd extended and revised edition, Springer-Verlag, London. of SymbolicC++ featured new classes such as the Polynomial class and initial support for simple integration. Support for the algebraic computation of Clifford algebras was described in using SymbolicC++ in 2002.Fletcher, J.P. (2002). Symbolic Processing of Clifford Numbers in C++ in Doran C., Dorst L. and Lasenby J. (eds.) Applied Geometrical Algebras in computer Science and Engineering AGACSE 2001, Birkhauser, Basel. http://www.ceac.aston.ac.uk/research/staff/jpf/papers/paper25/index.php Subsequently, support for Gröbner bases was added.Kruger, P.J.M (2003). Gröbner bases with Symbolic C++, M. Sc. Dissertation, Rand Afrikaans University. The third versionHardy, Y, Tan Kiat Shi and Steeb, W.-H. (2008). Computer Algebra with SymbolicC++, World Scientific Publishing, Singapore. features a complete rewrite of SymbolicC++ and was released in 2008. This version encapsulates all symbolic expressions in the Symbolic class.
Newer versions are available from the SymbolicC++ website.
See also
Comparison of computer algebra systems GiNaC
References
External links
Programming exercises in SymbolicC++