Top Qs
Timeline
Chat
Perspective
SymbolicC++
Computer algebra system From Wikipedia, the free encyclopedia
Remove ads
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.
Remove ads
Examples
Summarize
Perspective
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.[1][2][3][4]
Remove ads
History
Summarize
Perspective
SymbolicC++ is described in a series of books on computer algebra. The first book[5] 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 (likeBigInteger)Rational: A template class for rational numbersQuaternion: A template class for quaternionsDerive: A template class for automatic differentiationVector: 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 version[6] 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.[7] Subsequently, support for Gröbner bases was added.[8]
The third version[4] 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.
Remove ads
See also
References
External links
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads