Diag

Извлекает диагональ или создает диагональную матрицу.

vector matrix::Diag(
  const int     ndiag=0      // номер диагонали
   );
 
void matrix::Diag(
  const vector  v,           // диагональный вектор
  const int     ndiag=0      // номер диагонали
   );

Параметры

v

[in]  Вектор, элементы которого должны быть вписаны в соответствующую диагональ (ndiag=0 — главная диагональ).

ndiag=0

[in]  Диагональ. По умолчанию - 0. Для диагоналей выше основной указывается ndiag>0, для диагоналей ниже — ndiag<0.

 

Примечание

Устанавливать диагональ можно для нераспределённых матриц (не имеющих размеров). В этом случае будет создана нулевая матрица соответствующего диагональному вектору размера, после этого в соответствующей диагонали проставляются значения элементов вектора. Если диагональ устанавливается в уже существующую матрицу, то размеры матрицы не меняются и значения элементов матрицы за пределами вектора-диагонали не меняются.

Пример:

   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]
  */