PDA

View Full Version : [C++] Informazioni softcoded per proprietà matematiche


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.

sottovento
25-11-2014, 21:39
Qualche anno fa avevo scritto una libreria che, data una stringa contenente una espressione, la derivava in base alla variabile assegnata.
L'avevo scritta in java e messa a disposizione sotto sourceforge, magari puo' essere un inizio, no?
L'ho chiamata SottoventoDerive: http://sourceforge.net/projects/derive/

Sono anni che non controllo il progetto, andrebbe ripreso e migliorato. Se vuoi, e' tuo :D

biowep
25-11-2014, 21:49
Il nome è un tocco di classe :cool:
Grazie mille, ci guardo per confrontarmi e vedere se sto prendendo la direzione corretta e se i tuoi algoritmi sono migliori di quelli a cui ho pensato.

sottovento
25-11-2014, 22:06
Il nome è un tocco di classe :cool:
Grazie mille, ci guardo per confrontarmi e vedere se sto prendendo la direzione corretta e se i tuoi algoritmi sono migliori di quelli a cui ho pensato.
La puoi rinominare biowep se ti piace :D Certamente non me la prenderei.
Comunque ti accorgerai che si tratta semplicemente di un parser che crea un albero. Poi la derivazione simbolica e' solo un gioco a nascondino tra gli alberi...