2016-09-23 1 views
2

저는 SWI-Prolog를 사용하고 있으며 저는 매우 새롭고 여전히 배우고 있습니다. 실질적으로이 질문은 후속 조치입니다. Why can't my rule solve for X in a simple algebraic equation?Prolog/clpq가이 2 차 방정식을 푸는 이유는 무엇입니까?

clpq를 가져 왔습니다.

?- use_module(library(clpq)). 
true. 

내 방정식 6X 2 + 7 배이다 - 차 방정식을 사용하는 경우, X가 그대로 -1.5 또는도 1/3 인 3 = 0.

?- {(6 * X^2) + (7 * X) - 3 = 0}. 
{-3+7*X+6*X^2=0}. 

?- {(6 * X^2) + (7 * X) - 3 = 0}, R is float(X). 
ERROR: is/2: Arguments are not sufficiently instantiated 

음, 그것은 -3의 첨가 3의 감산을 약간 변경하여 식 감소하지만 X 대한 해결되지 않았다. 나의 첫 걸음은 대답을주고 그것을 받아들이는지 보는 것이다.

?- X is -1.5, (6 * X^2) + (7 * X) - 3 =:= 0. 
X = -1.5. 

음 ... 모든 것이 잘 어울립니다. 완전을 위해, 나는 또한 2 차 방정식을 실행했다. ("방정식"복수의 프롤로그에는 ± 운영자가 없습니다 같아요 때문이다. 적어도, 내가 하나를 찾을 수 없습니다.)

?- A is 6, B is 7, C is -3, X is (-B + sqrt((B^2) - (4 * A * C)))/(2 * A). 
A = 6, 
B = 7, 
C = -3, 
X = 0.3333333333333333. 

?- A is 6, B is 7, C is -3, X is (-B - sqrt((B^2) - (4 * A * C)))/(2 * A). 
A = 6, 
B = 7, 
C = -3, 
X = -1.5. 

이 좋아, 모든 체크 아웃 것 같다. 그래서, 왜 내 방정식을 풀 수 없습니까?

답변

1

CLPQ에는 비선형 제약 조건에 대한 제한이 있습니다. 예를 들어, 비선형 제약 조건 6x2 + 7x - 3 = 0은 x 값이 주어질 때만 풀릴 수 있으므로 CLPQ는 2 차 또는 다른 비선형 방정식을 풀 수 없습니다. 대신 당신은 할 수 :

?- {9 = X^2}. 
X = 3.0 ; 
X = -3.0 ; 

CLPQ 당신에게 줄 것이다 : clpr 당신 같은 방정식 해결할 수

주 당신이 할 수있는 이차 방정식

?- {9 = X^2}. 
{9-X^2=0}. 

false. 

을 (정확히 같이 예) : CLPQ (또는 CLPR)와

solve(X^2 + P*X + Q = 0):- 
     X = -(P/2) + ((P/2)^2 - Q)^(1/2); 
     X = -(P/2) - ((P/2)^2 - Q)^(1/2). 

:

,174,
?- solve(X^2+2*X+1=0). 
X = - (2/2)+ ((2/2)^2-1)^ (1/2) ; 
X = - (2/2)- ((2/2)^2-1)^ (1/2). 
관련 문제