求解Prolog中的方程组

时间:2013-04-12 17:01:51

标签: prolog equation-solving constraint-programming

假设我有一个数字X,我希望求解方程组,比如说Y + Z = X,Z * Y = 1。

现在,这具有解Y = 1 / Z和Z =(sqrt(X * X-4)+ X)/ 2或(X-(sqrt(X * X-4)))/ 2。

所以我可以写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.

这很有效。

BUT

我需要做大量的初步工作,基本上是事先解决,只是要求Prolog评估答案。

有没有办法可以获得Z和Y,而不事先解决X?

我不能只写像

这样的东西
solve(X,Y,Z):- X is Y+Z, Z is 1/Y.

因为实例化错误。

1 个答案:

答案 0 :(得分:3)

我认为你需要一个CAS来象征性地解决系统,就像你“手工”一样。这样的SW既不容易找到也不容易建立。

如果务实的方法可以为您完成,库(clprq)可以提供帮助:

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

产量

?- 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}.

这有意义吗?