2013-04-12 49 views
5

Giả sử tôi có số X và tôi muốn giải hệ phương trình, nói Y + Z = X, Z * Y = 1.Giải quyết hệ phương trình trong Prolog

Bây giờ, giải pháp này có Y = 1/Z và Z = (sqrt (X * X-4) + X)/2 hoặc (X- (sqrt (X * X-4)))/2.

Vì vậy, tôi có thể viết trong 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. 

này hoạt động.

NHƯNG

nó đòi hỏi rất nhiều công việc sơ bộ từ một phần của tôi, về cơ bản giải quyết nó trước và chỉ hỏi Prolog để đánh giá câu trả lời.

Có cách nào tôi có thể nhận được Z và Y, mà không giải quyết X trước?

tôi không thể chỉ viết những thứ như

solve(X,Y,Z):- X is Y+Z, Z is 1/Y. 

vì lỗi instantiation.

+0

http://stackoverflow.com/questions/13690136/im-curious-if-logical-program-can-do-algebra –

Trả lời

3

Tôi nghĩ rằng bạn sẽ cần một CAS, để biểu tượng giải quyết hệ thống, như bạn đã làm "bằng tay". SW như vậy không dễ tìm và không xây dựng.

Nếu một cách tiếp cận thực dụng có thể làm điều đó cho bạn, thư viện (clprq) có thể giúp:

:- [library(clpr)]. 
solve(X,Y,Z) :- {Y+Z=X, Z*Y=1}. 

mang

?- 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}. 

make này có ý nghĩa?

+1

Không thực sự, phải trung thực, nhưng tôi nghĩ rằng tôi có thể viết một người giải quyết cho mức độ thứ hai đa thức và sau đó sử dụng nó. Nhưng dù gì cũng cảm ơn. – Valtteri

+0

Tại sao phần mềm như vậy khó tìm? Nó không tồn tại? Nó không tồn tại cho Prolog? –

+0

@ErikAllik: đó là một chủ đề khá khó khăn và tôi không biết trang web nào từ nơi tải xuống CAS. Ít nhất trong một cuốn sách (google cho nghệ thuật Prolog, bởi Sterling-Shapiro), một CAS là chủ đề của một chương, có thể có giá trị để thực hiện như một điểm khởi đầu ... – CapelliC

Các vấn đề liên quan