5对角矩阵和for循环

问题描述 投票:0回答:1

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

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

访问矩阵的超/对角线并用向量写入它们。

一般的问题:在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;}
    }
 }

谢谢

c++ for-loop eigen allocation diagonal
1个回答
1
投票

听起来你想要跳过对角线,因为它们已经被初始化(这里分配的不是正确的术语)。 看看你设置对角线的循环,你可以看到你设置的每个(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
© www.soinside.com 2019 - 2024. All rights reserved.