在Prolog中解一个方程组



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

现在,这个解决方案Y = 1/Z和Z = (sqrt (X * * 4) + X)/2或(X - (sqrt (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.

这工作。

,

这需要我做大量的前期工作,基本上是事先解决它,然后让Prolog评估答案。

有没有一种方法可以让我得到Z和Y,而不需要事先解出X ?

我不能写像

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

由于实例化错误。

我认为您需要一个CAS来象征性地解决系统,就像您"手工"做的那样。这样的软件既不容易找到,也不容易构建。

如果一个实用的方法可以为您做到这一点,library(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}.

这有意义吗?

最新更新