相关疑难解决方法(0)

求解Prolog中的方程组

假设我有一个数字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.
Run Code Online (Sandbox Code Playgroud)

这有效.

它需要我的许多初步工作,基本上事先解决它,只是要求Prolog评估答案.

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

我不能只写像

solve(X,Y,Z):- X is Y+Z, Z is 1/Y.
Run Code Online (Sandbox Code Playgroud)

因为实例化错误.

prolog constraint-programming equation-solving

5
推荐指数
1
解决办法
2913
查看次数

Prolog中的二次方程求解

我已经编写了一个用类似术语来解决方程的代码(例如: - x ^ 2 + 5*x + 6 = 0).这里'x'有两个值.我可以输入';'来取两个值.但是当我立刻运行程序时,我需要得到所有可能的答案.在prolog中有可能吗?

prolog

5
推荐指数
0
解决办法
526
查看次数

优化swi prolog

我想找到argmax(x,y,z)-1/2(20x ^ 2 + 32xy + 16y ^ 2)+ 2x + 2y.

受制于:x> = 0,y> = 0,z> = 0且-x-y + z = 0.

我知道偏导数设置为0是:

-20x-16y + 2 = 0和-16x-16y + 2 = 0

所以我们可以得x = 0和y = 1/8,z = 1/8.

我如何在Swi-prolog中做到这一点?我看到有用于线性求解的库单形,但这是一个二次问题,但偏导数不是.(我有一点困惑!)

这就是我所拥有的:

:- use_module(library(simplex)).

my_constraints(S):-
 gen_state(S0),
 constraint([-20*x, -16*y] = 0, S0, S1),
 constraint([-16*x,-16*y] = 0, S1,S2),
 constraint([x] >= 0,S2,S3),
 constraint([y] >= 0,S3,S4),
 constraint([z] >= 0,S4,S5),
 constraint([-x-y+z] = 0,S5,S).

?- my_constraints(S), variable_value(S,x,Val1),variable_value(S,y,Val2).
false.
Run Code Online (Sandbox Code Playgroud)

prolog swi-prolog quadratic-programming

5
推荐指数
1
解决办法
322
查看次数