检查矩阵是否为上三角形 (c++)
Check if matrix is upper triangular (c++)
我一直在尝试编写代码来确定矩阵是否为上三角形,并打印它。
我试过循环,双循环,什么都没有。这是我目前遇到的混乱:
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|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;
矩阵是否是上三角形只能通过检查整个下部来确定。如果你一路上遇到一个非零元素,你就知道它不是上三角形的。在检查整个下部之前,您无法做出该决定。所以你的:
upper = true;
当你还在循环中时,语句没有逻辑基础。
该问题类似于字符串内的字符搜索。您需要检查整个字符串。如果您到达字符串的末尾但仍然没有找到您要查找的字符,那么(并且只有这样)您才知道该字符不在字符串中。与矩阵问题的唯一区别是,您现在多了一个维度。或者,换句话说,多个一维数组,与前一个数组相比,每个数组的大小为 +1,您必须搜索它们。
我认为
这可能会满足您的需求。注意:这假设矩阵是正方形的。如果不是(即 m!=n
) 您应该立即返回 false:
bool upper = true;
for (i=1; i<m && upper; ++i)
for (j=0; j<i && (upper = (0 == a[i][j])); ++j);
您是否考虑过使用内置此函数的矩阵库?我经常使用 Eigen 库,我发现语法非常易于使用 - 他们还有一个简短而有用的教程,可以很快熟悉。
http://eigen.tuxfamily.org/index.php?title=Main_Page
相关文章:
- 绘制旋转的三角形
- 如何用for循环在c++中生成单词三角形
- 如何使用递归打印修改后的星号三角形图案
- C++ 创建带有 for 循环的三角形
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Eigen c++ 三角形来自
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 使用对象文件读取三角形数据网格
- 从捕获的帧中裁剪三角形 - OpenCV 和 C++
- 如何从 3D 曲面网格中删除自相交三角形?
- 以C++输出一个数字三角形
- 打印对立三角形在C++中起作用
- 确定C++中的等腰直角三角形
- 是否可以使用 DirectX 3D 11 绘制由三角形组成的圆?
- 形成一个斐波那契三角形,使得每个数字是上面左对角线或右对角线上两个数字的总和
- OpenGL绘制三角形而不是正方形
- 将数字表示为两个三角形数字的总和
- OpenGL程序不显示三角形
- 在 OpenGL 中使用三角形绘制字母?