matematica simbolica è un progetto divertente. Se qualcuno lo usa o meno, non sembra importare nella tua domanda, quindi immergiti.
Ho scritto due di questi nel corso degli anni. Il più bello era quello per le clausole di SQL dove: ha fatto alcune manipolazioni simboliche banali su SQL per piegare alcune condizioni AND aggiuntive. Non un completo "risolutore" o "ottimizzatore" o altro, solo alcune manipolazioni simboliche di qualsiasi clausola SQL dove possibile. Quello meno interessante era per un debugger; ha fatto matematica complessa per risolvere (simbolicamente) gli offset di stack per le variabili.
Si inizia con la definizione di classi per gli elementi di un'espressione matematica - operandi, operatori, funzioni, ecc
Dovete decidere che cosa manipolazioni questi oggetti devono partecipare.Ottenere un valore concreto per un'espressione è facile e ovvio. Inizia con il caso in cui tutte le variabili hanno un legame.
Quindi gestire il caso in cui alcune variabili rimangono non associate e è possibile valutare solo parti dell'espressione.
Quindi gestire la riordinazione di un'espressione in una forma canonica. Io ho fatto una valutazione parziale e ho Add(Variable(x), Add(Variable(x), Lit(3)))
. È necessario scrivere regole per trasformare questo in Add(Multiply(Lit(2), Variable(x)), Lit(3))
.
Un esercizio molto interessante sta ottimizzando la parentesi in modo che l'output stampato abbia la parentesi minore necessaria per acquisire il significato.
Ci sono molte, molte altre regole di "trasformazione dell'espressione" che tutti impariamo a scuola per fare manipolazioni algebriche. Molti di loro.
In particolare, riorganizzare un'equazione per isolare una variabile può essere davvero difficile in alcuni casi.
Fare la trasformazione di derivata è facile, ma l'integrazione simbolica è davvero, davvero difficile con una tonnellata di casi speciali.
Le basi sono divertenti. A seconda di quanto lontano vuoi andare, diventa progressivamente più difficile.
Un'altra opzione di libreria è usare Sage (http://www.sagemath.org/) –