【问题标题】:Solving a system of equations in Prolog在 Prolog 中求解方程组
【发布时间】:2013-04-05 07:32:39
【问题描述】:

假设我有一个数字 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.

这行得通。

但是

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

有什么方法可以在不事先求解 X 的情况下得到 Z 和 Y?

我不能只写像

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

因为实例化错误。

【问题讨论】:

标签: prolog equation-solving constraint-programming


【解决方案1】:

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

如果实用的方法可以为您做到,图书馆(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}.

这有意义吗?

【讨论】:

  • 不是真的,说实话,但我认为我可以为二次多项式编写一个求解器,然后使用它。不过还是谢谢。
  • 为什么这样的软件难找?它不存在吗? Prolog 不存在吗?
  • @ErikAllik:这是一个相当困难的话题,我不知道从哪里下载 CAS 的网站。至少在一本书中(谷歌搜索 Prolog 的艺术,Sterling-Shapiro 着),CAS 是一章的主题,也许值得作为一个起点来实现......
  • @ErikAllik:好吧,我搜索得不够好,我找到了 PRESS to download
  • PRESS 更好的下载链接是github.com/maths/PRESS(来自stackoverflow.com/questions/13690136/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 2018-05-01
相关资源
最近更新 更多