2009-02-03 21 views
19

Sono estremamente interessato alla matematica e alla programmazione e sto pianificando l'avvio di progetto simbolicoda zero.Simbolico matematico simbolico?

  1. È una buona idea di progetto?

  2. Da dove iniziare?

  3. Come ci si deve avvicinare al progetto ?

  4. Qualche buona risorsa?

Grazie in anticipo.

risposta

19
  1. E 'un buon progetto per praticare competenze di programmazione. Ma se si vuole creare una vera e propria biblioteca che altre persone vorranno utilizzare questo è un progetto che non vuole iniziare allone e da zero ...

  2. Da dove cominciare: Date un'occhiata a delle soluzioni che sono già là fuori e pensano a cosa vuoi fare di diverso. In che modo il tuo progetto sarà diverso dagli altri?

  3. risorse: SymPy is a Python library for symbolic mathematics

+4

Un'altra opzione di libreria è usare Sage (http://www.sagemath.org/) –

4

@Risorse: è possibile dare un'occhiata a pythonica - questo era un tentativo di implementare un programma di tipo Mathematica in Python (il codice sorgente è disponibile per il download).

3

Questo pySym Blog potrebbe anche interessarti per ottenere idee e starter e imparare quello che altri stanno facendo con python & matematica simbolica.

1

di più in termini di risorse: SympyCore:

Lo scopo del progetto SympyCore è quello di cercare nuove soluzioni ad alte prestazioni per rappresentare e manipolare espressioni simboliche nel linguaggio di programmazione Python, e per provare nuovi modelli simbolici per ottenere un modello simbolico fondamentalmente coerente e sufficientemente generale che sarebbe facile estendersi a un Computer Algebra System (CAS).

7

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.

10

1.È questa buona idea di progetto?

Sì; Mi aspetterei che fornisca una fonte inesauribile di lavoro interessante che, abbastanza rapidamente, testerà ed estenderà i tuoi poteri di programmazione.

2. Da dove iniziare?

Io secondo gli altri suggerimenti che dovresti esaminare il lavoro esistente. SAGE è molto impressionante e se avessi chiesto il mio consiglio ti suggerirei di scrivere innanzitutto un sistema di base per fare aritmetica con numeri e simboli; quindi dai un'occhiata a SAGE e scrivi un modulo per estendere il sistema, in altre parole diventa un contributore a qualcosa di più grande piuttosto che cercare di fare tutto da solo. Guarda anche Mathematica e Maple, Macsyma e Axiom. Questi ultimi 2 sono gratuiti (credo) ma sono tutti ben documentati online e una grande fonte di idee e sfide.

3. Come si dovrebbe avvicinarsi a questo progetto?

Come ci si avvicina a mangiare un elefante. Un morso alla volta. Più seriamente, penso che ci siano alcuni problemi fondamentali, come la rappresentazione delle espressioni e alcune funzionalità di base (aritmetica sui polinomi) su cui potresti incastrarti.

4.Quali buone risorse?

Lotti e lotti. google per "computer algebra", "riscrittura del termine". Dai un'occhiata a ciò che è disponibile su Amazon. E, se hai accesso, consulta la libreria digitale ACM

Buona fortuna.

1

Penso che questo sia un grande progetto per un programmatore di qualsiasi livello di abilità. È abbastanza facile implementare un calcolatore simbolico che è abbastanza potente da essere utile. Se continui a lavorare sull'ampiezza, ci sono così tante funzioni divertenti da aggiungere che puoi occupartene per molto tempo. Se scegli di approfondire, scoprirai presto che le cose diventano molto difficili. Puoi sfidarti indefinitamente, se è questo che ti piace.

Ci sono molte grandi risorse.Raccomando il libro "Modern Computer Algebra" di zur Gathen e Gerhard, sebbene sia più interessato all'aritmetica in forme speciali (polinomi, interi, matrici) che alla generale manipolazione simbolica. Quando inizi, potresti essere meglio aiutato guardando alcuni tutorial di Lisp o Scheme, perché la matematica simbolica è concettualmente molto semplice da fare in Lisp e per costruire un motore simbolico in Python dovrai più o meno implementare un mini-Lisp come base.

Come altri hanno sottolineato, è possibile utilizzare SymPy e sympycore per l'ispirazione o algoritmi concreti. Il codice sorgente per entrambi i progetti è un po 'complesso (ma certamente non troppo difficile da imparare).

(Se posso inserire un bit, I wrote a tiny symbolic engine un po 'indietro (come un progetto del fine settimana - è molto piccolo e non ci ho lavorato da allora). Implementa un motore simbolico generico in circa 200 righe di codice e poi ci sono 300 righe di codice che implementano l'aritmetica simbolica e l'algebra booleana simbolica, con una semplificazione molto rudimentale, forse più facile da scavare di SymPy, ma tutto ciò che c'è dentro è qualcosa che potresti scoprire facilmente per te stesso e che potrebbe avere più divertimento facendo così.)

Problemi correlati