Diag

Eine Diagonale extrahieren oder eine Diagonalmatrix konstruieren.

vector matrix::Diag(
  const int     ndiag=0      // Zahl der Diagonale
   );
 
void matrix::Diag(
  const vector  v,           // Diagonalvektor
  const int     ndiag=0      // Zahl der Diagonale
   );

Parameter

v

[in] Ein Vektor, dessen Elemente in der entsprechenden Diagonale enthalten sind (ndiag=0 ist die Hauptdiagonale).

ndiag=0[in] Index der Diagonale: 0 (Standardwert) bezieht sich auf die Hauptdiagonale, ein positiver Wert bezieht sich auf eine obere Diagonale und ein negativer Wert auf eine untere Diagonale.RückgabewertEine Matrix, bei der alle Elemente gleich Null sind, mit Ausnahme der k-ten Diagonale, deren Werte gleich Eins sind.

[in]  Die betreffende Diagonale. Standardwert ist 0. Verwenden Sie ndiag>0 für Diagonalen oberhalb der Hauptdiagonale und ndiag<0 für Diagonalen unterhalb der Hauptdiagonale.

 

Hinweis

Auch für nicht allozierte Matrizen (die keine Dimensionen haben) kann eine Diagonale gesetzt werden. In diesem Fall wird eine Nullmatrix der Größe erstellt, deren Größe der Größe des Diagonalvektors entspricht, woraufhin die Vektorwerte in die entsprechende Diagonale eingefügt werden. Wenn die Diagonale auf eine bereits vorhandene Matrix gesetzt wird, ändern sich die Dimensionen der Matrix nicht und die Werte der Matrixelemente außerhalb des Diagonalvektors ändern sich nicht.

Beispiel

   vector v1={1,2,3};
   matrix m1;
   m1.Diag(v1);
   Print("m1\n",m1);
   matrix m2;
   m2.Diag(v1,-1);
   Print("m2\n",m2);
   matrix m3;
   m3.Diag(v1,1);
   Print("m3\n",m3);
   matrix m4=matrix::Full(4,5,9);
   m4.Diag(v1,1);
   Print("m4\n",m4);
   
   Print("diag -1 - ",m4.Diag(-1));
   Print("diag 0 - ",m4.Diag());
   Print("diag 1 - ",m4.Diag(1));
 
  /*
 
  m1
  [[1,0,0]
  [0,2,0]
  [0,0,3]]
  m2
  [[0,0,0]
  [1,0,0]
  [0,2,0]
  [0,0,3]]
  m3
  [[0,1,0,0]
  [0,0,2,0]
  [0,0,0,3]]
  m4
  [[9,1,9,9,9]
  [9,9,2,9,9]
  [9,9,9,3,9]
  [9,9,9,9,9]]
  diag -1 - [9,9,9]
  diag 0 - [9,9,9,9]
  diag 1 - [1,2,3,9]
  */