0

我试图了解如何存储带矩阵,我在“C++ 和面向对象的数值计算”一书中找到了一个示例,但我无法弄清楚bda[i] += P;行的目的是什么 这在尝试打印带状矩阵时也给我带来了问题。这里是:

int N = 5; //Matrix of NxN
int P = 1; //Left bandwidth
int R = 2; //Right bandwidth

//Matrix A
double A[5][5] = { { 1, 6, 10, 0, 0 },
        { 13, 2, 0, 11, 0 },
        { 0, 14, 3, 8, 12 },
        { 0, 0, 0, 4, 9 },
        { 0, 0, 0, 16, 5 } };

//Allocate memory for rows
double** bda = new double*[N];
for (int i = 0; i < N; i++) {
    bda[i] = new double[P + R + 1]; //Allocate memory for cols
    bda[i] += P; //What's the purpose of this?
}
4

1 回答 1

3

这用于存储矩阵的紧凑方式,该矩阵P在主对角线左侧具有非零对角线,R右侧具有非零对角线,所有其他元素均为零。P+R+1对于每一行,我们只为主对角线周围的元素分配空间。

bda[i] += P条线bda[i]指向主对角线上的一个元素。这可以更方便地使用矩阵:bda[i][0]在每个 的主对角线上ibda[i][1]在右边bda[i][-1]的第一个对角线上,在左边的第一个对角线上,等等。这允许您在主对角线上查找元素或靠近它,而不必P每次都添加。这是否有用取决于您如何使用矩阵。

请注意,如果您这样做,您将需要P从它bda[i]之前减去delete[]

于 2012-11-04T12:57:40.450 回答