我一直在尝试编写确定矩阵是否为上三角形的代码,并将其打印出来。
我尝试过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;
答案 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库,我发现语法非常容易使用 - 它们还有一个简短而有用的教程,可以很快熟悉。