我认为这很简单,但我做对了……
我有一个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
M
i
unsigned int row_index(i,M)
和
unsigned int column_index(i,M)
它所引用的矩阵元素的大小。所以 row_index(9,4) == 3,column_index(7,4) == 2等等。如果指数计数是从零开始。
row_index(9,4) == 3
column_index(7,4) == 2
编辑:已经给出了几个使用迭代的答复。有人知道代数表达式吗?
这是一个代数(主要是)解决方案:
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()