Diag

提取对角或构造对角矩阵。

vector matrix::Diag(

  const int     ndiag=0      // 对角线数

   );



void matrix::Diag(

  const vector  v,           // 对角线向量

  const int     ndiag=0      // 对角线数

   );

参数

v

[输入] 一个向量,其元素将包含在相应的对角线中(ndiag=0 是主对角线)。

ndiag=0

[输入]  问题中的对角。 默认填充值为 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]

  */