5 Stimmen

Gibt es eine Funktion zum Überprüfen, ob eine Matrix diagonal dominant ist (Zeilendominanz)

Eine Matrix ist diagonal dominant (nach Zeilen), wenn ihr Wert auf der Diagonalen im absoluten Sinne größer ist als die Summe aller anderen absoluten Werte in dieser Zeile. Das Gleiche gilt für Spalten, nur umgekehrt.

Gibt es eine Funktion in Matlab, um das zu überprüfen? (Ich könnte eine einfache Schleife schreiben, aber ich versuche, diese zu vermeiden).

18voto

Warum Schleife?

Sie können leicht die Summe der absoluten Werte in einer bestimmten Zeile bilden.

sum(abs(A),2)

Können Sie dies mit den absoluten Diagonalelementen in jeder Zeile vergleichen?

abs(diag(A)) >= sum(abs(A),2)

Natürlich ist dies nicht korrekt, da die Diagonalelemente nicht in der ersten Summe enthalten sein sollten. Wie auch immer, wir können das Problem leicht beheben.

(2*abs(diag(A))) >= sum(abs(A),2)

Schließlich benötigen wir ein Ergebnis aus diesem Test. Die obige Überprüfung erfolgt für jede Zeile. Eine Matrix ist diagonal dominant, wenn dieser Test für ALLE Zeilen wahr ist.

all((2*abs(diag(A))) >= sum(abs(A),2))

2voto

Jonas Punkte 74252

Es gibt keine Funktion, die ich kenne. Sie können jedoch einen einfachen Test ohne Schleifen durchführen.

%# Erstelle ein Array
array = magic(3);

%# Nehme den Betrag des Arrays
absArray = abs(array);

%# Um diagonal dominant zu sein, müssen die Zeilen- und Spaltensummen kleiner sein
%# als das Zweifache der Diagonalen
rowSum = sum(absArray,1)';%#' (Formatierungskommentar)
colSum = sum(absArray,2);
dia    = diag(absArray);

%# Test
isDiagonallyDominantByRow = all(rowSum <= 2 * dia); 
isDiagonallyDominantByCol = all(colSum <= 2 * dia);
isTotallyDominant = isDiagonallyDominantByRow && isDiagonallyDominantByCol;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X