2016-11-15 11 views
5

मैं कुछ सी # कोड लिख रहा हूं जो MathNet.Numerics.LinearAlgebra का उपयोग करता है, और पाठ्यपुस्तक उदाहरण के साथ परिणामों से मिलान करने का प्रयास करता है। कोड का एक हिस्सा एक और सरणी "Zbus" में एक complex32 सरणी "Ybus", और यह स्टोर के एक व्युत्क्रम करता है:मैट्रिक्स इनवर्स का उपयोग MathNet.Numerics

Matrix<Complex32> Ybus = Matrix<Complex32>.Build.Dense(numBuses, numBuses); 

Matrix<Complex32> Zbus = Matrix<Complex32>.Build.Dense(numBuses, numBuses); 

मेरे Ybus किताब में बिल्कुल उदाहरण मेल खाता है।

Ybus = j[ -13  5  4  0 
      5 -13.5 2.5  2 
      4  2.5  -9 2.5 
      0  2 2.5 -4.5] 

लेकिन जब मैं एक व्युत्क्रम करना

Zbus = Ybus.Inverse(); 

Zbus के परिणाम सभी NaN

जबकि किताब से सही परिणाम इस तरह दिखता है:

Zbus = j[ .15  .09 .12 .11 
      .09  .15 .12 .13 
      .12  .12 .25 .19 
      .11  .13 .19 .39] 

किसी को भी क्या कोई विचार है कि समस्या क्या हो सकती है? शायद एक जटिल मैट्रिक्स के उलटा कुछ मुद्दों है?

enter image description here

सबक सीखा:

enter image description here

: इतना है कि वे 0 के या उलटा को उड़ाने होगा :) ... की पंक्तियों अपने सरणियों बहुत बड़ा नहीं बनाते हैं यहाँ सही जवाब है
+0

यह मेरे लिए अच्छा काम करने लगता है। मेरा अनुमान है कि आपका 'यब्स' वह नहीं है जो आपको लगता है। चूंकि आप यह नहीं दिखाते कि आप 'यब्स' को कैसे पॉप्युलेट कर रहे हैं या आपने यह कैसे निर्धारित किया है कि आप यही दावा करते हैं कि समस्या यह है कि समस्या वास्तव में क्या है। –

+0

धन्यवाद। मुझे लगता है कि मुझे एक छवि पोस्ट करने के लिए पर्याप्त प्रतिष्ठा मिली है, इसलिए मैंने सरणी के तत्वों के कंसोल प्रिंट का एक स्क्रीनशॉट पोस्ट किया है। अजीब ... दो सरणी के बीच एकमात्र अंतर उलटा ऑपरेशन है। जब तक मेरे इनपुट सरणी के हुड के नीचे कुछ अजीब बात न हो .. –

+0

और बीटीडब्ल्यू, दोनों मामलों में सरणी तत्वों को मुद्रित करने के लिए एक ही विधि/फ़ंक्शन का उपयोग किया जाता है, इसलिए ऐसा नहीं है कि प्रिंटिंग प्रारूप या कुछ के साथ कोई समस्या है ... I लगता है –

उत्तर

2

जैसा कि जेसन ने उल्लेख किया है, ऐसा लगता है कि यह ठीक काम करता है। उदाहरण के लिए:

var y = Complex32.ImaginaryOne * CreateMatrix.Dense(4, 4, new Complex32[] {-13f,5f,4f,0f,5f,-13.5f,2.5f,2f,4f,2.5f,-9f,2.5f,0f,2f,2.5f,-4.5f}); 
y.ToString("F3"); 
y.Inverse().ToString("F3"); 

(पुस्तक में बुरा राउंडिंग को छोड़ कर) अपनी पुस्तक परिणाम मिलान, निम्न उत्पादन प्रदान करता है:

DenseMatrix 4x4-Complex32 
(0.000, -13.000) (0.000, 5.000) (0.000, 4.000) (0.000, 0.000) 
    (0.000, 5.000) (0.000, -13.500) (0.000, 2.500) (0.000, 2.000) 
    (0.000, 4.000) (0.000, 2.500) (0.000, -9.000) (0.000, 2.500) 
    (0.000, 0.000) (0.000, 2.000) (0.000, 2.500) (0.000, -4.500) 

DenseMatrix 4x4-Complex32 
(0.000, 0.153) (0.000, 0.097) (0.000, 0.126) (0.000, 0.113) 
(0.000, 0.097) (0.000, 0.153) (0.000, 0.124) (0.000, 0.137) 
(0.000, 0.126) (0.000, 0.124) (0.000, 0.256) (0.000, 0.197) 
(0.000, 0.113) (0.000, 0.137) (0.000, 0.197) (0.000, 0.393) 
+1

धन्यवाद क्रिस्टोफ। झूठे अलार्म के लिए खेद है। मेरा सरणी आकार बहुत बड़ा था और शून्यों की पंक्ति ने विपरीत विफल होने का कारण बना दिया। ओह, और बुरा दौर मुझे प्रत्येक नंबर के लिए 8 अंकों टाइप करने के लिए बहुत आलसी था :) वैसे, इस अद्भुत MathNet पुस्तकालय के लिए बहुत बहुत धन्यवाद। यह उन इंजीनियरों के लिए इतनी बड़ी मदद है जो मैट्रिक्स उलटा जैसे सामानों के लिए विस्तृत कोड लिखना नहीं चाहते हैं। –

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