gpt4 book ai didi

prolog - 使用 Prolog 库 Simplex 求解线性方程组

转载 作者:行者123 更新时间:2023-12-04 08:19:06 25 4
gpt4 key购买 nike

我正在尝试使用 SWI-Prolog simplex library以实数集为域求解线性方程组。有没有人知道为什么以下查询不成功?

maximize(
[],
state(
0,
[],
[
c(0,
[- 0.95*x(3),0.05*x(0),0.05*x(1),0.05*x(2)],
=,
1479754163278877r9007199254740992),
c(0,
[0.95*x(2),- 0.05*x(0),- 0.05*x(1),- 0.05*x(3)],
=,
185786871969449310676024028079063r3975352282315727403093661252059136
),
c(0,
[0.95*x(1),- 0.05*x(0),- 0.05*x(2),- 0.05*x(3)],
=,
756128230024134313216574233897861r15901409129262909612374645008236544
),
c(0,
[0.95*x(0),- 0.05*x(1),- 0.05*x(2),- 0.05*x(3)],
=,
294112628726237r72057594037927936
)
],
[]
),
S).
我打算解决的系统如下:
0.05*x(0)+0.05*x(1)+0.05*x(2)-0.95*x(3)
=
1479754163278877/9007199254740992

- 0.05*x(0)- 0.05*x(1)+0.95*x(2)- 0.05*x(3)
=
185786871969449310676024028079063/3975352282315727403093661252059136

- 0.05*x(0)+0.95*x(1)- 0.05*x(2)- 0.05*x(3)
=
756128230024134313216574233897861/15901409129262909612374645008236544

0.95*x(0)- 0.05*x(1)- 0.05*x(2)- 0.05*x(3)
=
294112628726237/72057594037927936
或者,你能知道在 Prolog 中解决这个问题的更好方法吗?

最佳答案

看起来求解器假设所有变量都是非负的。所以问题变成了:我们可以重新制定Ax=b吗? ,其中 x是自由变量,变成使用非负变量的东西吗?答案是:是的。使用称为变量拆分的技术,我们可以替换每个 x(j)来自 xplus(j)-xmin(j)哪里xplus(j),xmin(j)>=0 .所以方程组变为:

  sum(j, a(i,j)*(xplus(j)-xmin(j))) = b(i)   for all i
xplus(j),xmin(j)>=0

我们可能需要确保只有一对 (xplus(j),xmin(j)) 中的一个可以变为非零。这可能会自动成立,因为如果两者都在基中,基矩阵 B 将变得奇异。但是我们也可以设置一个目标来处理这个问题:
  min sum(j, xplus(j)+xmin(j))
只要方程组有一个可行解,目标将确保 (xplus(j),xmin(j))中只有一个非零。

关于prolog - 使用 Prolog 库 Simplex 求解线性方程组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65583359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com