5 对角矩阵和 for 循环

5 Diagonal Matrix and for loops

有没有更简单的方法来构造 Eigen 中的 5 对角矩阵?我可能可以 运行 for 循环并分配对角线和零,但我确实遇到过 Diagonal<> 只是不确定如何将它用于 5 个对角线,而不是一个。有任何想法吗?编辑:想通了这个!对于那些想知道的人;你可以使用

matrix.diagonal(+n) = vector;
matrix.diagonal(-n) = vector;

访问矩阵的 super/sub 条对角线并用向量覆盖它们。

一般问题:当 运行在 C++ 中使用 for 循环时,有什么方法可以跳过分配吗?例如:

int n; //size of matrix
MatrixXd m(n,n); //nxn matrix

for(int i=0; i<n; i++)
{ 
   m(i,i) = 5; 
   m(i,i+1) = 6;
   m(i,i-1) = 4;
   m(i,i+2) = 7;
   m(i,i-2) = 3;
}


for (int i=0; i<n; i++)
{
    for(int j=0; j<n; j++)
    {
         if(m(i,j) = something) //I want the loop to skip m(i,j) where 
            break;              //i have already allocated values to m(i,j)
                                //How do I do that, in general, in C++?      
         else
       { m(i,j) = 0;}
    }
 }

谢谢

听起来你想跳过对角线,因为它们已经被初始化(分配在这里不是正确的术语)。
查看您设置对角线的循环,您可以看到您设置的每个 (i,j) 都服从 abs(i-j) <= 2。例如,当您设置小于或等于 2 的元素 (i, i+2) -> abs(i-(i+2)) -> abs(-2) -> 2 时。

所以你的第二个循环中的条件应该是:

if (abs(i-j) <= 2)
  continue;//break will exit the loop, continue will skip to the next iteration