2013-04-12 11 views
5

Si supponga Ho un certo numero X e mi auguro di risolvere sistemi di equazioni, dicono Y + Z = X, Z * Y = 1.Risolvere un sistema di equazioni in Prolog

Ora, questo non ha soluzioni Y = 1/Z e Z = (sqrt (X * X-4) + X)/2 o (X- (sqrt (X * X-4)))/2.

Quindi posso scrivere in Prolog:

solve(X,Y,Z):- Y is (sqrt(X*X-4)+X)/2, Z is 1/Y. 
solve(X,Y,Z):- Y is (X-(sqrt(X*X-4)))/2,Z is 1/Y. 

Questo funziona.

MA

richiede un sacco di lavoro preliminare da parte mia, in sostanza, di risolvere in anticipo e solo chiedendo Prolog per valutare la risposta.

C'è un modo per ottenere Z e Y, senza prima risolvere X?

Non posso scrivere cose del genere

solve(X,Y,Z):- X is Y+Z, Z is 1/Y. 

causa di un errore di un'istanza.

+0

http://stackoverflow.com/questions/13690136/im-curious-if-logical-program-can-do-algebra –

risposta

3

Penso che avresti bisogno di un CAS, per risolvere simbolicamente il sistema, come hai fatto "a mano". Tale SW non è né facile da trovare né da costruire.

Se un approccio pragmatico può farlo per voi, biblioteca (clprq) potrebbe aiutare:

:- [library(clpr)]. 
solve(X,Y,Z) :- {Y+Z=X, Z*Y=1}. 

cede

?- solve(3,Y,Z). 
{Z=3.0-Y, -1.0+Z*Y=0.0}, 
{-1.0+Z*Y=0.0}, 
{-1.0+Z*Y=0.0}. 

fa questo senso?

+1

Non proprio, per essere onesti, ma penso che potrei scrivere un risolutore per il secondo grado polinomio e poi usarlo. Ma grazie comunque. – Valtteri

+0

Perché questo software è difficile da trovare? Non esiste? Non esiste per Prolog? –

+0

@ErikAllik: è un argomento abbastanza difficile e non conosco un sito da cui scaricare un CAS. Almeno in un libro (google per The art of Prolog, di Sterling-Shapiro), un CAS è stato l'argomento di un capitolo, forse potrebbe valere la pena di implementarlo come punto di partenza ... – CapelliC

Problemi correlati