Piszę kod C#, który używa MathNet.Numerics.LinearAlgebra i próbuje dopasować wyniki z przykładu podręcznikowego. Jedna część kodu robi inwersję o complex32 tablicy „Ybus” i przechowuje go w innej tablicy „Zbus”:Macierz odwrotna za pomocą MathNet.Numerics
Matrix<Complex32> Ybus = Matrix<Complex32>.Build.Dense(numBuses, numBuses);
Matrix<Complex32> Zbus = Matrix<Complex32>.Build.Dense(numBuses, numBuses);
My Ybus Zastępuje dokładnie przykład w książce.
Ybus = j[ -13 5 4 0
5 -13.5 2.5 2
4 2.5 -9 2.5
0 2 2.5 -4.5]
Ale kiedy zrobić inwersję
Zbus = Ybus.Inverse();
wyniki Zbus są NaN
natomiast poprawny wynik z książki wygląda następująco:
Zbus = j[ .15 .09 .12 .11
.09 .15 .12 .13
.12 .12 .25 .19
.11 .13 .19 .39]
Każdy masz jakieś pomysły na temat problemu? Może inwersja złożonej matrycy ma pewne problemy? dowiedział
Lekcja: Nie używaj zbyt duże tablice tak, że mają rzędy znaków 0 lub odwrotności będzie wysadzić :) ... Tutaj jest prawidłowa odpowiedź:
Wydaje się działać dobrze dla mnie. Domyślam się, że twój "Ybus" nie jest taki, jak myślisz. Ponieważ nie pokazujesz, w jaki sposób wypełniasz 'Ybus' lub jak ustaliłeś, że to jest to, co twierdzisz, trudno jest dokładnie określić problem. –
Dzięki. Wydaje mi się, że mam dość reputacji, by opublikować zdjęcie, dlatego właśnie opublikowałem zrzut ekranu wydruku konsoli elementów tablicy. Dziwne ... jedyną różnicą między tymi dwiema tablicami jest operacja Inverse. Chyba że pod maską mojej tablicy wejściowej jest coś dziwnego ... –
A przy okazji ta sama metoda/funkcja jest używana w obu przypadkach do drukowania elementów tablicy, więc nie ma problemu z formatem drukowania lub czymś ... myśl –