2013-03-13 8 views
14

मैं जावा में जटिल गुणांक के साथ बहुपद की जड़ों की गणना करने का एक तरीका खोजने की कोशिश कर रहा हूं (यानी MATLAB में जड़ों() के साथ हास्यास्पद रूप से आसानी से किया गया है।जावा में जटिल-गुणांक बहुपद रूट खोज

मैं एक रूट खोज एल्गोरिदम को रिकोड करने के लिए तैयार हूं जो साथी मैट्रिक्स बनाता है और फिर जड़ें खोजने के लिए सामान्यीकृत ईजेनवाल्यू अपघटन का उपयोग करता है, लेकिन इसके लिए मुझे एक पुस्तकालय की आवश्यकता होगी जो जटिल मूल्यवान मैट्रिक्स संचालन को संभालती है।

मैं थोड़ी देर के लिए ब्राउज़ की हैं और ठोस कुछ भी नहीं वहाँ बाहर उपलब्ध होने की है, जो मुझे लगता है कि नहीं बल्कि अजीब है लगता है। फिर, मैं आप से पूछना चाहते हैं:

  1. आप एक (स्थिर) जावा पुस्तकालय है कि जटिल गुणांक द्वारा परिभाषित बहुआयामी पद पर रूट खोज करता है पता है?

  2. क्या आप एक (स्थिर) जावा लाइब्रेरी जानते हैं जो COMPLEX- मूल्यवान मैट्रिक्स पर evd, svd, उलटा, आदि करता है?

नोट: मैं पहले से ही जामा (जटिल प्रबंधन नहीं करती है), माइकल थॉमस फ्लानागन के जावा वैज्ञानिक लाइब्रेरी (अब उपलब्ध नहीं), कोल्ट (जटिल संभाल नहीं लगता है), कुशल जावा मैट्रिक्स को देखा लाइब्रेरी (या तो कोई जटिल), DDogleg अंकीय JScience (जटिल गुणांक के साथ बहुपद संभाल नहीं करता है), (स्पष्ट नहीं करता है, तो ईवीडी उपलब्ध है) और आम-गणित अपाचे (स्पष्ट नहीं है अगर वे जटिल मैट्रिक्स के लिए अनुमति देते हैं, से और हाँ अगर, अगर ईवीडी उपलब्ध है)।

उत्तर

3

Durand-Kerner method भी जटिल गुणांक के लिए काम करता है और मैट्रिक्स संगणना पर निर्भर नहीं करता।

यह लागू करने के लिए काफी सरल है, तो आप एक कार्यान्वयन अप गूगल सकता है (Stackoverflow मुझे मनाही एक मैंने पाया लिंक करने के लिए) या अपना खुद का एक बनाते हैं। आप जटिल डेटा प्रकारों के लिए jscience लाइब्रेरी का उपयोग कर सकते हैं, न कि एल्गोरिदम के लिए।

संपादित करें: है कि आप भी ईवीडी की जरूरत नहीं देखा, जटिल मैट्रिक्स गणित के लिए एक विकल्प के रूप में jscience की मेरी उल्लेख कोई बात नहीं।

+0

धन्यवाद एक बहुत! यह विधि वास्तव में कार्यान्वित करने में काफी आसान थी, और मुझे इस तरह के अच्छे परिणाम मिल रहे हैं - समस्या हल हो गई। – Virginie

1

एक यह असली रखने के लिए चाहता है, Bairstow method का उपयोग करें। यदि बहुपद की विषम डिग्री है, तो वास्तविक रूट खोजने और बहुपद तक डिग्री को कम करने के लिए पहले Newton's method का उपयोग करें। यह बैयरस्टो विधि की एक विषम एकवचनता से बचाता है जहां यह एक वर्गीय बहुपद की ओर अभिसरण करता है जिसमें एक रूट के रूप में अनंतता होती है। अच्छी गुणवत्ता के सूचना सामान्य स्थानों पर पाया जा सकता है। कुछ का यह लिखित या सही मायने में तुम्हारा द्वारा संपादित।

आंतरिक रूट त्रिज्या आर निर्धारित करें और बैरस्टो की विधि के लिए प्रारंभिक कारक के रूप में यादृच्छिक कोण phi के साथ z^2-2r * cos (phi) * z + r^2 का उपयोग करें। यह प्रत्येक चरण में एक वर्गबद्ध कारक बनाता है, हमेशा वास्तविक गुणांक के साथ और वास्तविक जड़ों की एक जोड़ी या जटिल जड़ों की संयुग्मित जोड़ी। अभिसरण की गति के लिए प्रत्येक चरण में

चेक और एक अलग प्रारंभिक बिंदु के साथ पुनः आरंभ यदि आवश्यक हो तो। अपस्फीति के बाद नई जड़ों का पता लगाएं, और मूल बहुपद और प्रारंभिक बिंदु के रूप कारकों के साथ विधि को क्रियान्वित करते हुए जड़ों या द्विघात कारकों पॉलिश।

संबंधित मुद्दे