在c ++中逐列保存矩阵

时间:2017-12-20 17:41:31

标签: c++ matrix

我试图理解这段代码,但我不能: n×n矩阵按列保存。我区分完整(F),上(U)和下(L)矩阵。 n是矩阵的维数

int sum(int k){
int s = 0;
for (int i = 1; i<=k; i++)
    s += i;
return s;}


double getentry(int j, int k){
    j--;k--;

    assert(typ == 'F' || typ == 'U' || typ == 'L');
    assert(k<n && j<n);

    if(typ == 'F') return mat[k*n+j];
    if(typ == 'L') return (k>j)?(0.0):(mat[k*n+j-sum(k)]);  
    if(typ == 'U') return (j>k)?(0.0):( mat[k*n+j-sum(n-1)+sum(n-(k+1))]);
}

我特别不理解这句话:

if(typ == 'L') return (k>j)?(0.0):(mat[k*n+j-sum(k)]);  
    if(typ == 'U') return (j>k)?(0.0):( mat[k*n+j-sum(n-1)+sum(n-(k+1))]);

但如果您能解释这一行,我将不胜感激:

if(typ == 'F') return mat[k*n+j];

1 个答案:

答案 0 :(得分:2)

   if(typ == 'L') return (k>j)?(0.0):(mat[k*n+j-sum(k)]);  
        if(typ == 'U') return (j>k)?(0.0):( mat[k*n+j-sum(n-1)+sum(n-(k+1))]);

签署使用packed storage schem来存储矩阵。

另请注意,IMHO整体代码质量非常低,例如无需使用 for-loop 计算sum(k),其显式表达式为(k + 1)* k / 2,等等。