Prolog

2013-04-12 7 views
5
में समीकरणों की एक प्रणाली को सुलझाने

मान लें मैं एक नंबर एक्स है और मैं समीकरणों के सिस्टम को हल करना चाहते हैं, वाई + Z = एक्स, जेड * वाई = 1.Prolog

समाधान अब, यह है कहते हैं कि वाई = 1/जेड और जेड = (वर्ग (एक्स * एक्स -4) + एक्स)/2 या (एक्स- (वर्ग (एक्स * एक्स -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 पूछ जवाब का मूल्यांकन करने के।

क्या कोई तरीका है कि मैं ज़ेड और वाई प्राप्त कर सकता हूं, एक्स को पहले बिना हल किए?

मैं नहीं की तरह

solve(X,Y,Z):- X is Y+Z, Z is 1/Y. 
इन्स्टेन्शियशन त्रुटि के कारण

सामान लिख सकते हैं।

+0

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

उत्तर

3

मुझे लगता है कि आपको सिस्टम द्वारा प्रतीकात्मक रूप से हल करने के लिए एक सीएएस की आवश्यकता होगी, जैसा कि आपने "हाथ से" किया था। ऐसा एसडब्ल्यू न तो ढूंढना और न ही बनाना आसान है।

एक व्यावहारिक दृष्टिकोण यह तुम्हारे लिए क्या कर सकते हैं, पुस्तकालय (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}. 

कोई मतलब है?

+1

वास्तव में, ईमानदार होने के लिए नहीं, लेकिन मुझे लगता है कि मैं दूसरी डिग्री के लिए एक सॉल्वर लिख सकता हूं बहुपद और फिर इसका उपयोग करें। लेकिन फिर भी धन्यवाद। – Valtteri

+0

ऐसे सॉफ़्टवेयर को क्यों खोजना मुश्किल है? क्या यह अस्तित्व में नहीं है? क्या प्रोलॉग के लिए यह अस्तित्व में नहीं है? –

+0

@EricAllik: यह एक काफी मुश्किल विषय है, और मुझे एक साइट के बारे में पता नहीं है जहां से सीएएस डाउनलोड किया जाए। कम से कम एक पुस्तक (प्रोलिंग-आर्ट ऑफ़ प्रोलॉग के लिए Google, स्टर्लिंग-शापिरो द्वारा), एक सीएएस एक अध्याय का विषय था, शायद शुरुआती बिंदु के रूप में लागू करने के लायक हो सकता है ... – CapelliC