गणितीय पृष्ठभूमि
चलो वास्तविक संख्याओं के एन मैट्रिक्स द्वारा एक एन हो, एन वास्तविक संख्या के बा वेक्टर और एक्सए वेक्टर एन अज्ञात वास्तविक संख्या। एक मैट्रिक्स समीकरण एक्स = बी है।
जैकोबी की विधि निम्नानुसार है: ए = डी + आर को विघटित करें, जहां डी विकर्णों का मैट्रिक्स है, और आर शेष प्रविष्टियां हैं।
यदि आप एक प्रारंभिक अनुमान समाधान x0 बनाते हैं, तो एक बेहतर समाधान X1 = व्युत्क्रम (D) * (b - Rx) है जहां सभी गुणा मैट्रिक्स-वेक्टर गुणा और व्युत्क्रम हैं (D) मैट्रिक्स व्युत्क्रम है।
समस्या की विशिष्टता
- इनपुट : आपका पूरा कार्यक्रम निम्नलिखित डेटा को इनपुट के रूप में स्वीकार करना चाहिए: मैट्रिक्स ए, वेक्टर बी, एक प्रारंभिक अनुमान x0, और एक 'त्रुटि' नंबर ई।
- आउटपुट : कार्यक्रम को पुनरावृत्तियों की न्यूनतम संख्या को आउटपुट करना होगा जैसे कि नवीनतम समाधान वास्तविक समाधान से भिन्न होता है, अधिकांश ई द्वारा। इसका मतलब यह है कि पूर्ण परिमाण में वैक्टर के प्रत्येक घटक सबसे अधिक ई द्वारा भिन्न होते हैं। आपको पुनरावृत्तियों के लिए जैकोबी की विधि का उपयोग करना चाहिए।
डेटा कैसे इनपुट किया जाता है यह आपकी पसंद है ; यह कमांड लाइन पर आपका अपना सिंटैक्स हो सकता है, आप एक फ़ाइल से इनपुट ले सकते हैं, जो भी आप चुनते हैं।
डेटा कैसे आउटपुट किया जाता है यह आपकी पसंद है ; यह एक फ़ाइल के लिए लिखा जा सकता है, कमांड लाइन में प्रदर्शित किया जाता है, जिसे ASCII कला, कुछ भी लिखा जाता है, जब तक कि यह मानव द्वारा पठनीय हो।
आगे की जानकारी
आपको सही समाधान नहीं दिया जाता है: आप सही समाधान की गणना कैसे करते हैं, यह पूरी तरह आप पर निर्भर है। आप इसे उदाहरण के लिए क्रैमर के नियम द्वारा हल कर सकते हैं, या सीधे उलटा गणना कर सकते हैं। क्या मायने रखता है कि आपके पास पुनरावृत्तियों की तुलना करने में सक्षम होने के लिए एक सच्चा समाधान है।
परिशुद्धता एक मुद्दा है; तुलना के लिए कुछ लोगों के 'सटीक समाधान' अलग हो सकते हैं। इस कोड गोल्फ के उद्देश्यों के लिए सटीक समाधान 10 दशमलव स्थानों के लिए सही होना चाहिए।
बिल्कुल स्पष्ट होने के लिए, यदि आपके वर्तमान पुनरावृत्ति समाधान का एक घटक भी ई द्वारा सही समाधान में इसके संगत घटक से अधिक है, तो आपको पुनरावृति रखने की आवश्यकता है।
N की ऊपरी सीमा इस बात पर निर्भर करती है कि आप किस हार्डवेयर का उपयोग कर रहे हैं और प्रोग्राम को चलाने के लिए कितना समय देना चाहते हैं। इस कोड गोल्फ के प्रयोजनों के लिए, अधिकतम N = 50 मान लें।
पूर्व शर्त
जब आपका कार्यक्रम कहा जाता है, तो आप यह मानने के लिए स्वतंत्र हैं कि निम्नलिखित हर समय होता है:
- एन> 1 और एन <51, यानी आपको कभी स्केलर समीकरण नहीं दिया जाएगा, हमेशा एक मैट्रिक्स समीकरण।
- सभी इनपुट वास्तविक संख्या के क्षेत्र से अधिक हैं, और कभी भी जटिल नहीं होंगे।
- मैट्रिक्स ए हमेशा ऐसा होता है कि विधि सही समाधान में परिवर्तित हो जाती है, जैसे कि आप हमेशा ई के नीचे या इसके बराबर त्रुटि को कम करने के लिए कई पुनरावृत्तियों को पा सकते हैं।
- A कभी भी शून्य मैट्रिक्स या पहचान मैट्रिक्स नहीं है, अर्थात इसका एक समाधान है।
परीक्षण के मामलों
A = ((9, -2), (1, 3)), b = (3,4), x0 = (1,1), e = 0.04
सही समाधान है (0.586, 1.138)। पहला पुनरावृति X1 = (5/9, 1) देता है, सही समाधान से 0.04 से अधिक भिन्न, कम से कम एक घटक द्वारा। एक और पुनरावृत्ति लेते हुए, हम पाते हैं x2 = (0.555, 1.148) जो 0.04 से कम (0.586, 1.138) से भिन्न होता है। इस प्रकार आउटपुट है
2
A = ((2, 3), (1, 4)), b = (2, -1), x0 = (2.7, -0.7), e = 1.0
इस मामले में सही समाधान है (2.2, -0.8) और प्रारंभिक अनुमान x0 में पहले से ही e = 1.0 से कम त्रुटि है, इस प्रकार हम 0. आउटपुट करते हैं। यानी, जब भी आपको पुनरावृत्ति करने की आवश्यकता नहीं होती है, आप बस आउटपुट करते हैं
0
सबमिशन असेसमेंट
यह कोड गोल्फ है, जिसमें सभी मानक कमियां हैं जिसके कारण यह अस्वीकृत हो गया है। सबसे छोटा सही पूरा कार्यक्रम (या फ़ंक्शन), यानी बाइट्स की सबसे कम संख्या जीतती है। मैथेमेटिका जैसी चीजों का उपयोग करने के लिए हतोत्साहित किया जाता है जो एक फ़ंक्शन में बहुत सारे आवश्यक कदमों को लपेटते हैं, लेकिन किसी भी भाषा का उपयोग करें जो आप चाहते हैं।