首頁 >後端開發 >C++ >C++程式查找法向量和跡

C++程式查找法向量和跡

WBOY
WBOY轉載
2023-09-09 16:41:091079瀏覽

C++程式查找法向量和跡

二維陣列或矩陣在多個應用中非常有用。矩陣有行和列,並在其中儲存數字。在C 中,我們也可以使用多維數組來定義二維矩陣。在本文中,我們將看到如何使用C 計算給定矩陣的範數和跡。

法線是矩陣中所有元素總和的平方根。跡是主對角線中存在的元素的總和。讓我們看看演算法和 C 程式碼表示。

矩陣法線

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

Sum of all elements: (5 + 1 + 8 + 4 + 3 + 9 + 2 + 7 + 3) = 42
Normal: (Square root of the sum of all elements) = √42 = 6.48

在上面的範例中,我們取了一個 3 x 3 矩陣,這裡我們得到所有元素的和,然後對其進行平方根。讓我們看看該演算法,以便更好地理解。

演算法

  • 讀取矩陣 M 為輸入
  • 考慮 M 有 n 行和 n 列
  • 總和:= 0
  • 對於從 1 到 n 的 i,執行
    • 對於 j 從 1 到 n,執行下列操作
      • sum := sum M[ i ][ j ]​​i>
    • 結束循環
  • 結束循環
  • res := 平方根的和
  • 回傳結果

範例

#include <iostream>
#include <cmath>
#define N 5
using namespace std;
float solve( int M[ N ][ N ] ){
   int sum = 0;
   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},
      {48, 2, 98, 6, 63},
      {85, 12, 10, 6, 9},
      {6, 12, 18, 32, 5},
      {8, 45, 74, 69, 1},
   };
   cout << "Normal of the first matrix is: " << solve( mat1 ) << endl;
   int mat2[ N ][ N ] = {
      {6, 8, 35, 21, 87},
      {99, 2, 36, 326, 25},
      {15, 215, 3, 157, 8},
      {96, 115, 17, 5, 3},
      {56, 4, 78, 5, 10},
   };
   cout << "Normal of the second matrix is: " << solve( mat2 ) << endl;
}

輸出

Normal of the first matrix is: 28.0357
Normal of the second matrix is: 37.8418

矩陣跡

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

Sum of all elements in main diagonal: (5 + 3 + 3) = 11 which is
the trace of given matrix

在上面的例子中,我們取了一個3 x 3的矩陣,在這裡我們得到了主對角線上所有元素的和。這個和就是矩陣的跡。讓我們來看看演算法,以便更好地理解。

演算法

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

範例

#include <iostream>
#include <cmath>
#define N 5
using namespace std;
float solve( int M[ N ][ N ] ){
   int sum = 0;
   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},
      {48, 2, 98, 6, 63},
      {85, 12, 10, 6, 9},
      {6, 12, 18, 32, 5},
      {8, 45, 74, 69, 1},
   };
   cout << "Trace of the first matrix is: " << solve( mat1 ) << endl;
   int mat2[ N ][ N ] = {
      {6, 8, 35, 21, 87},
      {99, 2, 36, 326, 25},
      {15, 215, 3, 157, 8},
      {96, 115, 17, 5, 3},
      {56, 4, 78, 5, 10},
   };
   cout << "Trace of the second matrix is: " << solve( mat2 ) << endl;
}

輸出

Trace of the first matrix is: 50
Trace of the second matrix is: 26

結論

法線和跡線都是矩陣運算。為了執行這兩個操作,我們需要一個方陣(因為需要跡方陣)。法線只是矩陣中存在的所有元素總和的平方根,跡是矩陣主對角線上存在的元素總和。此矩陣可以使用 C 中的二維數組來表示。這裡我們舉了兩個 5 行 5 列矩陣(總共 25 個元素)的例子。存取矩陣需要帶有索引操作的循環語句。對於正常的計算,我們需要遍歷每個元素,因此需要兩個巢狀循環。這個程式的複雜度是O(n2)。對於跟踪,由於我們只需要查看主對角線,因此行索引和列索引將相同。所以只需要一個for迴圈就夠了。可以在O(n)時間內計算出來。

以上是C++程式查找法向量和跡的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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