SymbolicC++
SymbolicC++ | |
---|---|
Desenvolvedor | Yorick Hardy, Willi-Hans Steeb and Tan Kiat Shi |
Lançamento | 2010 |
Versão estável | 3.35 |
Escrito em | C++ |
Sistema operacional | Multiplataforma |
Gênero(s) | Sistema algébrico computacional |
Licença | GPL |
Página oficial | http://issc.uj.ac.za/symbolic/symbolic.html |
SymbolicC++ é um Sistema algébrico computacional de propósito geral incorporado na linguagem de programação C++. É um software livre lançado sob os termos da GNU General Public License. O SymbolicC++ é usado através da inclusão em um arquivo de cabeçalho da linguagem C++ ou através de links para uma biblioteca.
Exemplo
#include <iostream> #include "symbolicc++.h" using namespace std; 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; }
O seguinte fragmento de programa inverte a matriz symbolically.
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) ];
A saída é
[ cos(theta) −sin(theta) ] [ sin(theta) cos(theta) ]
O próximo programa ilustra símbolos não-comutativos em SymbolicC++. Aqui b
é um operador de aniquilação e bd
é um operador de criação. A variável vs
denota o estado de vácuo . O operador ~
alterna a comutatividade de uma variável, isto é, se b
é comutativa então ~b
é não-comutativa e se b
é não-comutativa ~b
é comutativa.
#include <iostream> #include "symbolicc++.h" using namespace std; int main(void) { // O operador b é o operador de aniquilação e bd é o operador de criação Symbolic b("b"), bd("bd"), vs("vs"); b = ~b; bd = ~bd; vs = ~vs; Equations rules = (b*bd == bd*b + 1, b*vs == 0); // Exemplo 1 Symbolic result1 = b*bd*b*bd; cout << "result1 = " << result1.subst_all(rules) << endl; cout << "result1*vs = " << (result1*vs).subst_all(rules) << endl; // Exemplo 2 Symbolic result2 = (b+bd)^4; cout << "result2 = " << result2.subst_all(rules) << endl; cout << "result2*vs = " << (result2*vs).subst_all(rules) << endl; return 0; }
Outros exemplos podem ser encontrados nos livros listados abaixo.[1][2][3][4]
História
SymbolicC++ é descrito em uma série de livros sobre álgebra computacional. O primeiro livro[5] descreveu a primeira versão da SymbolicC++. Nesta versão o principal tipo de dados para computação simbólica foi a classe Sum
. A lista de classes disponíveis incluiu
Verylong
: Um implementação de Inteiro ilimitadoRational
: Uma classe de modelo para números racionaisQuaternion
: Uma classe de modelo parar quaterniõesDerive
: Uma classe de modelo para diferenciação automáticaVector
: Uma classe de modelo para vetores (ver espaço vetorial)Matrix
: Uma classe de modelo para matrizes (ver matriz (matemática))Sum
: Uma classe de modelo para expressões simbólicas
Exemplo:
#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; }
A segunda versão[6] da SymbolicC++ apresentou novas classes, como a classe Polynomial
e suporte inicial para integração simples. O suporte para a computação algébrica de álgebras de Clifford foi descrito usando a SymbolicC++ em 2002.[7] Subsequentemente, o suporte para bases de Gröbner foi adicionado.[8] A terceira versão[4] apresentou uma completa reescrita da SymbolicC++ e foi lançada em 2008. Esta versão encapsula todas as expressões simbólicas na classe Symbolic
.
As versões mais recentes estão disponíveis do website da SymbolicC++.
Ver também
- GiNaC
Referências
- ↑ 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.
- ↑ a b Hardy, Y, Tan Kiat Shi and Steeb, W.-H. (2008). Computer Algebra with SymbolicC++, World Scientific Publishing, Singapore.
- ↑ Tan Kiat Shi and Steeb, W.-H. (1997). SymbolicC++: An introduction to Computer Algebra Using Object-Oriented Programming Springer-Verlag, Singapore.
- ↑ Tan 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.
- ↑ 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 Arquivado em 25 de setembro de 2006, no Wayback Machine. - ↑ Kruger, P.J.M (2003). Gröbner bases with Symbolic C++, M. Sc. Dissertation, Rand Afrikaans University.
Ligações externas
- website oficial
- Exercícios de programação em SymbolicC++