2016-11-15 22 views
5

kullanarak ve bir ders kitabı örnekle sonuçlarını maç için çalışıyor. kodun bir kısmı başka dizi "Zbus" bir complex32 dizide "Ybus" ve mağazalar bunu bir ters çevirmeyi yapar:Matris Ters Ben MathNet.Numerics.LinearAlgebra kullanan bazı C# kodu yazıyorum MathNet.Numerics

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

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

Benim Ybus kitapta aynen örnek eşleşir.

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

Ama bir ters çevirmeyi yaptığınızda kitaptan doğru sonuç şuna benzer iken Zbus ait

Zbus = Ybus.Inverse(); 

sonuç tüm NaN

şunlardır:

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

herkes sorunun ne olabileceği hakkında fikir sahibi misiniz? Belki karmaşık bir matrisin tersine dönmesi bazı sorunlara neden olur?

enter image description here

Ders:

enter image description here

: bunlar 0 en ya ters havaya uçurmak olacaktır :) ... satırlar var böylece diziler çok büyük yapmazlar İşte doğru cevap
+0

benim için çok iyi çalışıyor görünüyor. Benim tahminim, senin "Ybus" ın düşündüğün gibi değil. “Ybus” u nasıl yediğinizi göstermediğinizden ya da iddia ettiğiniz şeyin nasıl olduğunu belirlediğinizden, sorunun tam olarak ne olduğunu söylemek zor. –

+0

Teşekkürler. Sanırım bir görüntüyü yayınlamak için yeterince itibarım var, bu yüzden dizinin elemanlarının konsol baskısının ekran görüntüsünü yayınladım. Garip ... iki dizinin arasındaki tek fark Ters işlemdir. Benim giriş dizimin kaputunun altında tuhaf bir şey olmadığı sürece .. –

+0

Ve btw, her iki durumda da aynı elemanlar/fonksiyonlar, dizi elemanlarını yazdırmak için kullanılır, bu yüzden baskı formatı ya da bir şeyle ilgili bir sorun yoktur ... –

cevap

2

Jason'ın bahsettiği gibi, bu iyi çalışıyor gibi görünüyor. Örneğin:

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"); 

(kitapta kötü yuvarlama hariç) Kitap sonucuyla eşleşen, şu çıktıyı verir:

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

Teşekkürler Christoph. Yanlış alarm için kusura bakmayın. Dizi büyüklüğüm çok büyüktü ve sıfırlar dizisi tersinin başarısız olmasına neden oldu. Oh, ve kötü yuvarlama her numara için 8 basamak yazmak için çok tembel olmama neden oldu :) Bu arada, bu harika MathNet kütüphanesi için çok teşekkürler. Matris inversiyonu gibi şeyler için detaylı kodu yazmak istemeyen mühendislerimiz için çok büyük bir yardım. –

İlgili konular