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

#include <iostream>

#include "symbolicc++.h" using namespace std;

SymbolicC++

int main(void) { Symbolic x("x"); cout << integrate(x+1, x); // => 1/2*x^(2)+x Symbolic y("y"); cout << df(y, x); // => 0 cout << df(y[x], x); // => df(y[x],x) cout << df(exp(cos(y[x])), x); // => -sin(y[x])*df(y[x],x)*e^cos(y[x]) return 0; }

SymbolicC++

The following program fragment inverts the matrix

symbolically.

SymbolicC++

Symbolic theta("theta"); Symbolic R = ( ( cos(theta), sin(theta) ), ( -sin(theta), cos(theta) ) ); cout << R(0,1); // sin(theta) Symbolic RI = R.inverse(); cout << RI[ (cos(theta)^2) == 1 - (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.

#include <iostream>

#include "symbolicc++.h" using namespace std;

int main(void) { // The operator b is the annihilation operator and bd is the creation operator Symbolic b("b"), bd("bd"), 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; cout << "result1 = " << result1.subst_all(rules) << endl; cout << "result1*vs = " << (result1*vs).subst_all(rules) << endl;

// Example 2

Symbolic result2 = (b+bd)^4; cout << "result2 = " << result2.subst_all(rules) << endl; cout << "result2*vs = " << (result2*vs).subst_all(rules) << endl;

return 0; }

Further examples can be found in the books listed below.

History

SymbolicC++ is described in a series of books on computer algebra. The first book 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

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: #include <iostream> #include "rational.h" #include "msymbol.h" using namespace std;

int main(void) { Sum<int> x("x",1); Sum<Rational<int> > y("y",1); cout << Int(y, y); // => 1/2 yˆ2 y.depend(x); cout << df(y, x); // => df(y,x) return 0; }

The second version 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. Subsequently, support for Gröbner bases was added. The third version 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++

Free computer algebra systems

Free software programmed in C++

C++ libraries

Articles with example C++ code