检查矩阵是否为上三角形(c ++)

时间:2012-11-14 20:54:10

标签: c++ for-loop while-loop triangular

我一直在尝试编写确定矩阵是否为上三角形的代码,并将其打印出来。

我尝试过while循环,双循环,没有。这是我目前的混乱:

int i, j;
int count = 0;
bool upper;

while (upper = true;)
{
for (i=1; i<m; i++)
{
   for (j=i-1; j<n; j++)
   {
      if (a[i] > a[j] && a[i][j] == 0.0)
         upper = true;
      else if (a[i][j] != 0.0)
         upper = false;
   }
}
}
//   cout << "Matrix is upper triangular. " << count << endl;

4 个答案:

答案 0 :(得分:1)

看一下例子:

 |0|1|2|3|4|5|
0| | | | | | |
1|X| | | | | |
2|X|X| | | | |
3|X|X|X| | | |
4|X|X|X|X| | |
5|X|X|X|X|X| |

该矩阵是上三角形,用X标记的单元都是零。
对于第i行 - 单元格{i,0},{i,1},...,{i,i-1}必须为零。

所以这很简单:

bool isUpperTriangle = true; // be optimistic!
for (int i = 1; i < SIZE && isUpperTriangle; ++i) // rows
    for (int j = 0; j < i && isUpperTriangle; ++j) // columns - see example
        if (m[i][j] != 0) 
            isUpperTriangle = false;

答案 1 :(得分:1)

我认为这可能会做你想要的。注意:这假设矩阵 square 。如果不是(即m!=n),您应立即返回false:

bool upper = true;
for (i=1; i<m && upper; ++i)
   for (j=0; j<i && (upper = (0 == a[i][j])); ++j);

答案 2 :(得分:1)

矩阵是否为上三角形只能通过检查整个下半部分来确定。如果你遇到一个非零元素,你知道它不是上三角形。在检查整个下半部分之前,您无法做出决定。所以你的:

upper = true;
当你还在循环中时,

语句没有逻辑依据。

问题类似于字符串中的字符搜索。你需要检查整个字符串。如果你到达字符串的末尾但仍然没有找到你正在寻找的字符,那么(并且只有那时)你知道该字符不在字符串中。矩阵问题的唯一区别是你现在有了一个额外的维度。或者,换句话说,多个一维数组,每个数组的大小与前一个数组相比都是+1,你必须全部搜索它们。

答案 3 :(得分:0)

您是否考虑过使用内置此功能的矩阵库?我经常使用Eigen库,我发现语法非常容易使用 - 它们还有一个简短而有用的教程,可以很快熟悉。

http://eigen.tuxfamily.org/index.php?title=Main_Page