一尘不染

三角矩阵系数的指数算法

algorithm

我认为这很简单,但我做对了……

我有一个MxM三角矩阵,其系数逐行存储在向量中。例如:

M =   [ m00 m01 m02 m03 ] 
      [     m11 m12 m13 ]
      [         m22 m23 ]
      [             m33 ]

存储为

coef[ m00 m01 m02 m03 m11 m12 m13 m22 m23 m33 ]

现在,我正在寻找一种非递归算法,该算法可为我提供矩阵大小M和系数数组索引i

unsigned int row_index(i,M)

unsigned int column_index(i,M)

它所引用的矩阵元素的大小。所以 row_index(9,4) == 3column_index(7,4) == 2等等。如果指数计数是从零开始。

编辑:已经给出了几个使用迭代的答复。有人知道代数表达式吗?


阅读 195

收藏
2020-07-28

共1个答案

一尘不染

这是一个代数(主要是)解决方案:

unsigned int row_index( unsigned int i, unsigned int M ){
    double m = M;
    double row = (-2*m - 1 + sqrt( (4*m*(m+1) - 8*(double)i - 7) )) / -2;
    if( row == (double)(int) row ) row -= 1;
    return (unsigned int) row;
}


unsigned int column_index( unsigned int i, unsigned int M ){
    unsigned int row = row_index( i, M);
    return  i - M * row + row*(row+1) / 2;
}

编辑:固定row_index()

2020-07-28