簡體   English   中英

檢查矩陣是否是上三角(c++)

[英]Check if matrix is upper triangular (c++)

我一直在嘗試編寫確定矩陣是否為上三角矩陣的代碼,然后將其打印出來。

我試過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|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;

我認為這可能會滿足您的要求。 注意:這里假設矩陣是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);

矩陣是否為上三角矩陣只能通過檢查整個下半部分來確定。 如果一路上遇到一個非零元素,你就知道它不是上三角。 在您檢查整個下部之前,您無法做出該決定。 所以你的:

upper = true;

仍在循環中的語句沒有邏輯基礎。

該問題類似於字符串中的字符搜索。 您需要檢查整個字符串。 如果您到達字符串的末尾但仍然沒有找到您要查找的字符,那么(並且只有這樣)您是否知道該字符不在字符串中。 與矩陣問題的唯一區別是您現在多了一個維度。 或者,換句話說,多個一維數組,每個數組的大小都比前一個數組大 1 倍,你必須全部搜索它們。

您是否考慮過使用內置此功能的矩陣庫? 我經常使用 Eigen 庫,我發現它的語法非常易於使用——它們還有一個簡短而有用的教程,可以讓你很快熟悉。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM