我试图理解这段代码,但我不能: 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];
答案 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,等等。