将上三角矩阵变换为全矩阵C ++

时间:2011-07-15 02:05:32

标签: c++ vector matrix

如何看待可以将上三角矩阵转换为完整矩阵的代码。 矩阵在矢量中,而不是在二维数组中......

所以数组

[ 1 2 3 4
  0 5 6 7
  0 0 8 9
  0 0 0 10 ]

会变成如下数组:

[ 1 2 3 4
  2 5 6 7
  3 6 8 9
  4 7 9 10 ]
你可以提供一些想法,我正在考虑应用某种模块或其他东西......

有一个限制,我没有使用二维数组 我使用的是矢量,因此是一维数组

1 个答案:

答案 0 :(得分:1)

首先,您必须了解反射矩阵的fundemtnal性质。对于任何ij,以下断言均为真:

m[i][j] ≡ m[j][i]

所以,你需要一些算法才能做到这一点。我可以建议:

for(int i = 0; i < HEIGHT; ++i)
  for(int j = 0; j < i; ++j)
    m[i][j] = m[j][i];

注意第二循环的条件。确保j始终小于i,我们将活动限制在左下角三角形。

接下来,您必须了解如何在一维数组中实现二维矩阵。您似乎已经建立了身份:

m[i][j] ≡ v[i*WIDTH+j]

代替,我们有:

for(int i = 0; i < HEIGHT; ++i)
  for(int j = 0; j < i; ++j)
    v[i*WIDTH+j] = v[j*WIDTH+i];