biowep
25-11-2014, 20:36
Salve, sto cercando di realizzare una sorta di Computer Algebra System (CAS) per maneggiare in forma simbolica entità matematiche quali operandi ed operatori. Praticamente vorrei realizzare quante più possibile delle funzionalià di un CAS qualsiasi come risoluzione di espressioni con costanti simboliche, ricerca delle soluzioni di un'equazione almeno lineare, derivate, primitive, ed altre cose di questo tipo. Quello che vorrei sapere è come codificare in maniera esterna al programma le informazioni delle proprietà matematiche e come devo interpretare queste informazioni nel programma?
Nello specifico intendo voglio codificare informazioni su, ad esempio, come ricondurmi ad una forma canonica:
(x+y)^2 => x^2+2xy+y^2
log_x(y) => log(y)/log(x)
sqrt(x) => x^(1/2)
oppure come ricavare le derivate degli operatori
(d/dx)e^f(x) => (d/dx)f(x)*e^f(x)
(d/dx)log(f(x)) => (d/dx)f(x)/f(x)
ecc
La struttura di un'espressione è un albero con elementi di tipo operatore (padre) ed operando (foglia).
Queste informazioni devo ovviamente usarle durante il run-time per poter effettivamente svolgere le operazioni richieste. La domanda è, che tipo di codifica devo usare, che librerie, cosa posso cercare per trovare maggiori informazioni...?
Mi andrebbe anche bene codificare queste informazioni in qualche modo che non sia il C++ per poter poi generare le funzioni in C++ che le svolgono nei dettagli in modo automatico, come una sorta di metaprogrammazione più potente, elegante e semplice dei template e macro. Quindi va bene sia compile-time che run-time.
Nello specifico intendo voglio codificare informazioni su, ad esempio, come ricondurmi ad una forma canonica:
(x+y)^2 => x^2+2xy+y^2
log_x(y) => log(y)/log(x)
sqrt(x) => x^(1/2)
oppure come ricavare le derivate degli operatori
(d/dx)e^f(x) => (d/dx)f(x)*e^f(x)
(d/dx)log(f(x)) => (d/dx)f(x)/f(x)
ecc
La struttura di un'espressione è un albero con elementi di tipo operatore (padre) ed operando (foglia).
Queste informazioni devo ovviamente usarle durante il run-time per poter effettivamente svolgere le operazioni richieste. La domanda è, che tipo di codifica devo usare, che librerie, cosa posso cercare per trovare maggiori informazioni...?
Mi andrebbe anche bene codificare queste informazioni in qualche modo che non sia il C++ per poter poi generare le funzioni in C++ che le svolgono nei dettagli in modo automatico, come una sorta di metaprogrammazione più potente, elegante e semplice dei template e macro. Quindi va bene sia compile-time che run-time.