首頁  >  文章  >  後端開發  >  C++程式用來找出給定矩陣的跡和法線

C++程式用來找出給定矩陣的跡和法線

WBOY
WBOY轉載
2023-08-30 10:37:051203瀏覽

C++程式用來找出給定矩陣的跡和法線

有些應用程式可以從二維陣列或矩陣的使用中受益匪淺。 數字儲存在矩陣的行和列中。使用多維數組,我們 也可以用 C 定義 2D 矩陣。在這篇文章中,我們將了解如何使用 C 確定給定矩陣的法線和跡線。

矩陣中元素總數的平方根就是所謂的 普通的。跡線由構成主對角線的所有組件組成。讓我們 查看 C 程式碼中演算法的表示。

矩陣跡

$\begin{bmatrix} 8 & 5& 3\換行符 6 & 7& 1\換行 2 & 4& 9\換行符 \end{bmatrix},$

主對角線上所有元素的和:(8 7 9) = 24,這是給定矩陣的跡

在上一個範例中,使用了一個 3 x 3 矩陣,結果是各矩陣的總和 主對角線中的元素數量。矩陣的跡可以在總和中找到。讓我們 看一下演算法有助於我們理解。

演算法

  • 讀取矩陣 M 為輸入
  • 假設 M 有 n 行 n 列
  • 總和:= 0
  • 對於從 1 到 n 的 i,執行
    • sum := sum M[ i ][ i ]​​i>
  • 結束
  • 傳回總和

範例

#include <iostream>
#include <cmath>
#define N 7
using namespace std;
float solve( int M[ N ][ N ] ){
   int sum = 0;
   
   // read elements through major diagonal, where row index and column index are same, both are i
   for ( int i = 0; i < N; i++ ) {
      sum = sum + M[ i ][ i ];
   }
   return sum;
}
int main(){
   int mat1[ N ][ N ] = {
      {5, 8, 74, 21, 69, 78, 25},
      {48, 2, 98, 6, 63, 52, 3},
      {85, 12, 10, 6, 9, 47, 21},
      {6, 12, 18, 32, 5, 10, 32},
      {8, 45, 74, 69, 1, 14, 56},
      {7, 69, 17, 25, 89, 23, 47},
      {98, 23, 15, 20, 63, 21, 56},
   };
   cout << "The Trace of the first matrix is: " << solve( mat1 ) << endl;
   int mat2[ N ][ N ] = {
      {6, 8, 35, 21, 87, 8, 26},
      {99, 2, 36, 326, 25, 24, 56},
      {15, 215, 3, 157, 8, 41, 23},
      {96, 115, 17, 5, 3, 10, 18},
      {56, 4, 78, 5, 10, 22, 58},
      {85, 41, 29, 65, 47, 36, 78},
      {12, 23, 87, 45, 69, 96, 12}
   };
   cout << "The Trace of the second matrix is: " << solve( mat2 ) << endl;
}

輸出

The Trace of the first matrix is: 129
The Trace of the second matrix is: 74

矩陣法線

$\begin{bmatrix} 8 & 5& 3\換行符 6 & 7& 1\換行 2 & 4& 9\換行符 \end{bmatrix},$

所有元素的總和:(8 5 3 6 7 1 2 4 9) = 45

常態:(所有元素總和的平方根)= √45 = 6.708

在上一個範例中,使用了 3 x 3 矩陣。我們首先計算其所有條目的總和 在求其平方根之前。讓我們看一下演算法來幫助我們理解。

演算法

  • 讀取矩陣 M 為輸入
  • 假設 M 有 n 行 n 列
  • 總和初始化為 0
  • 對於從 1 到 n 的 i,執行
    • 對於範圍從 1 到 n 的 j,執行
      • sum := sum M[ i ][ j ]​​i>
    • 結束
  • 結束
  • res := 總和的平方根
  • 回傳結果

範例

#include <iostream>
#include <cmath>
#define N 7
using namespace std;
float solve( int M[ N ][ N ] ){
   int sum = 0;
   
   // go through each element. Using outer loop, access ith row, using inner loop access column. For cell (i, j) read the element and add it to the sum
   for ( int i = 0; i < N; i++ ) {
      for ( int j = 0; j < N; j++ ) {
         sum = sum + M[ i ][ j ];
      }
   }
   return sqrt( sum );
}
int main(){
   int mat1[ N ][ N ] = {
      {5, 8, 74, 21, 69, 78, 25},
      {48, 2, 98, 6, 63, 52, 3},
      {85, 12, 10, 6, 9, 47, 21},
      {6, 12, 18, 32, 5, 10, 32},
      {8, 45, 74, 69, 1, 14, 56},
      {7, 69, 17, 25, 89, 23, 47},
      {98, 23, 15, 20, 63, 21, 56},
   };
   cout << "The Normal of the first matrix is: " << solve( mat1 ) <<
       endl;
   int mat2[ N ][ N ] = {
      {6, 8, 35, 21, 87, 8, 26},
      {99, 2, 36, 326, 25, 24, 56},
      {15, 215, 3, 157, 8, 41, 23},
      {96, 115, 17, 5, 3, 10, 18},
      {56, 4, 78, 5, 10, 22, 58},
      {85, 41, 29, 65, 47, 36, 78},
      {12, 23, 87, 45, 69, 96, 12}
   };
   cout << "The Normal of the second matrix is: " << solve( mat2 ) <<
       endl;
}

輸出

The Normal of the first matrix is: 41.1947
The Normal of the second matrix is: 49.4267

結論

法線和跡線運算屬於矩陣。這兩個過程需要 方陣,這就是我們需要的(因為需要跡方)。跡線的總和是 矩陣主對角線中包含的元素,而法線只是 矩陣中所包含的元素總數的平方根。在C 中,矩陣可以 使用二維數組顯示。在這裡,我們選擇了兩個 5 行 5 列的矩陣 範例(共 25 個元素)。必須透過循環語句存取矩陣 和指數操縱。需要兩個巢狀循環,因為要執行典型的 計算時,我們必須迭代每個元素。而這個程式的複雜度是O(n2)。 由於追蹤只需要主對角線,因此行索引和列索引將是 相同的。因此,只需要一個for迴圈。在O(n)時間內確定。

以上是C++程式用來找出給定矩陣的跡和法線的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除