从C中的给定向量创建对称矩阵的例程

时间:2018-09-21 21:40:15

标签: c algorithm matrix matrix-indexing symmetric

让我说我有向量

layers

我想从x创建一个对称矩阵。即一个对称矩阵,其中x为第一行和第一列,x0为对角线。换句话说,我想要这样的矩阵X:

x = [x0, x1, x2, x3] = [0, 2, 3, 1]. 

问题:

  1. 如何用C语言做到这一点?
  2. 如何将其扩展为给定的任何长度向量?

计算机科学不是我的专长,因此到目前为止,我的所有尝试都是可笑的,并且涉及一个又一个循环。我缺少明显的东西吗?

谢谢

1 个答案:

答案 0 :(得分:2)

诀窍在于, input 数组中的索引是 output 数组中的索引的总和。 例如,

output[0][3] = output[1][2] = output[2][1] = output[3][0] = input[3] 

但是,这有两个问题:

首先,主对角线(上/左至下/右)始终是输入数组的第一个元素。通过检查输出索引是否相等,可以将其作为特殊情况处理。

然后,当 output 索引的总和大于允许的最大 input 索引时,该怎么办。在这种情况下,输入数组的索引是通过减法计算的,如下面的代码所示。

#define SIZE 4

int input[SIZE] = {0,1,2,3};
int output[SIZE][SIZE];

for (int row = 0; row < SIZE; row++)
    for (int col = 0; col < SIZE; col++)
    {
        if (row == col)                        // special case for the main diagonal
            output[row][col] = input[0];
        else if (row + col < SIZE)             // normal case for small indexes
            output[row][col] = input[row+col];
        else                                   // special case for large indexes
            output[row][col] = input[2*(SIZE-1) - (row + col)];
    }