19

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;).

+9

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ì. –

+0

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

+0

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

risposta

10

Mi sono occupato di queste domande io stesso qualche tempo fa. Ho quindi trovato this document sulla semplificazione delle espressioni. È intitolato Semplificazione delle espressioni basata su regole e mostra alcuni dettagli sulla semplificazione in Mupad, che in seguito divenne parte di Matlab.

In base a questo documento, la tua ipotesi è corretta. C'è una serie di regole per la manipolazione delle espressioni. Una metrica euristica della qualità viene utilizzata come funzione obiettivo per la semplificazione.

+0

Molto utile, grazie. Purtroppo è più o meno quello che mi aspettavo, o forse è una fortuna, non sono sicuro :-) – sanity

+0

Non trovato :(Sai dove potrebbe esserci un link corrente? – Uzebeckatrente

2

Wolfram alfa è sviluppato da Mathematica

  • matematica è frutto di stephen wolphram. Mathematica 1.0 è stata rilasciata nel 1988. Mathematica è molto simile all'acero ed entrambi fanno molto affidamento su vecchie librerie software come LaPack.
  • Le librerie che questi programmi sono, basati su, e spesso semplicemente, software legacy. Sono stati intorno, e modificati, per un tempo molto lungo.

Se si desidera conoscere i programmi in background in esecuzione, sagemath è un'alternativa open source gratuita; si potrebbe possibile effettuare il reverse engineering delle soluzioni alle vostre domande: le persone

SageMath.org

Problemi correlati