Sto costruendo un linguaggio di programmazione basato sul web parzialmente ispirato a Prolog e Haskell (non ridere).In che modo un sistema come Wolfram Alpha o Mathematica risolve le equazioni?
Ha già un bel po 'di funzionalità, è possibile controllare il prototipo allo http://www.lastcalc.com/. Puoi vedere la fonte here e leggere l'architettura here. Ricorda che è un prototipo.
Attualmente LastCalc non può semplificare espressioni o risolvere equazioni. Piuttosto che codificarlo a fondo in Java, vorrei migliorare il linguaggio fondamentale in modo tale che possa essere esteso per fare queste cose usando nient'altro che il linguaggio stesso (come con Prolog). A differenza di Prolog, LastCalc ha un algoritmo di ricerca più potente, Prolog è "ricerca approfondita con backtracking", LastCalc utilizza attualmente una ricerca euristica migliore per prima.
Prima di approfondire questo argomento voglio capire di più su come altri sistemi risolvono questo problema, in particolare Mathematica/Wolfram Alpha.
Suppongo che l'idea, almeno nel caso generale, sia quella di fornire al sistema alcune regole per la manipolazione delle equazioni (come a*(b+c) = a*b + a+c
) specificare l'obiettivo (ad esempio, isolare la variabile x) e quindi lasciarlo andare.
Quindi, le mie domande sono:
- È la mia ipotesi è corretta?
- Qual è la strategia di ricerca per l'applicazione delle regole? per esempio. profondità prima, ampiezza prima, profondità prima con approfondimento iterativo, una specie di migliore prima?
- Se è "prima il migliore", quali euristiche vengono utilizzate per determinare se è probabile che una particolare applicazione di regole ci abbia avvicinato al nostro obiettivo?
Apprezzerei anche qualsiasi altro consiglio (tranne che per "rinunciare" - ignoro regolarmente quel consiglio e farlo mi ha servito bene;).
per favore, non larga questo come troppo vicino ... ehm, il contrario. Questo è interessante e comprensibile - e comunque, vai a trovare alcuni di quei "gimme teh codez" o "why does" "foo" [0] = 'b'; 'segfault?" domande, il tuo CV servirebbe uno scopo molto migliore lì. –
Stai chiedendo di risolvere equazioni o parsing di espressioni? "risolvere 150sin (x) -gamma (x) = 0" è una cosa, "parse ((((x + 1) -1) +1) -sin (x) -1))" è un'altra cosa, comunque il primo può coinvolgere il secondo. – hexafraction
Buona domanda. LastCalc è piuttosto strano in quanto tutto ciò che fa, sia l'analisi, la conversione delle unità o (presto) la semplificazione delle espressioni e la risoluzione delle equazioni, è solo una serie di trasformazioni - il punto di partenza è una lista di token. Tuttavia, l'analisi non è una sfida, quindi concentrati sulla risoluzione, non sull'analisi. – sanity