Maison  >  Article  >  développement back-end  >  Programme C++ pour trouver la trace et la normale d'une matrice donnée

Programme C++ pour trouver la trace et la normale d'une matrice donnée

WBOY
WBOYavant
2023-08-30 10:37:051157parcourir

Programme C++ pour trouver la trace et la normale dune matrice donnée

Certaines applications peuvent grandement bénéficier de l'utilisation de tableaux ou de matrices bidimensionnelles. Les nombres sont stockés dans les lignes et les colonnes de la matrice. En utilisant des tableaux multidimensionnels, nous Les matrices 2D peuvent également être définies en C++. Dans cet article, nous allons apprendre à utiliser le C++ Déterminez la normale et la trace de la matrice donnée.

La racine carrée du nombre total d'éléments dans une matrice est ce qu'on appelle Ordinaire. La trace est constituée de toutes les composantes qui composent la diagonale principale. laissez-nous Affichez la représentation de l'algorithme dans le code C++.

Trace matricielle

$commencer{bmatrix} 8, 5 et 3 caractères de nouvelle ligne 6 & 7 & 1 nouvelle ligne 2, 4 et 9 caractères de nouvelle ligne fin{bmatrix},$

La somme de tous les éléments sur la diagonale principale : (8 + 7 + 9) = 24, qui est la trace de la matrice donnée

Dans l'exemple précédent, une matrice 3 x 3 a été utilisée et le résultat est la somme des matrices Le nombre d'éléments dans la diagonale principale. La trace de la matrice se retrouve dans la somme. laissez-nous Cela aide à comprendre si l’on regarde l’algorithme.

Algorithme

  • Lire la matrice M en entrée
  • Supposons que M ait n lignes et n colonnes
  • Somme : = 0
  • Pour i de 1 à n, fais
    • somme := somme + M[ je ][ je ]​​i>
  • Fin
  • Rendre la somme

Exemple

#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;
}

Sortie

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

Matrice normale

$commencer{bmatrix} 8, 5 et 3 caractères de nouvelle ligne 6 & 7 & 1 nouvelle ligne 2, 4 et 9 caractères de nouvelle ligne fin{bmatrix},$

Somme de tous les éléments : (8 + 5 + 3 + 6 + 7 + 1 + 2 + 4 + 9) = 45

Normal : (racine carrée de la somme de tous les éléments) = √45 = 6,708

Dans l'exemple précédent, une matrice 3 x 3 a été utilisée. On calcule d'abord la somme de toutes ses entrées avant de trouver sa racine carrée. Regardons l'algorithme pour nous aider à comprendre.

Algorithme

  • Lire la matrice M en entrée
  • Supposons que M ait n lignes et n colonnes
  • La somme est initialisée à 0
  • Pour i de 1 à n, fais
    • Pour j allant de 1 à n, faites
      • somme := somme + M[ i ][ j ]​​i>
    • Fin
  • Fin
  • res := racine carrée de la somme
  • Retour des résultats

Exemple

#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;
}

Sortie

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

Conclusion

Les opérations normales et de trace appartiennent aux matrices. Ces deux processus nécessitent Matrice carrée, c'est ce dont nous avons besoin (car nous avons besoin du carré trace). La somme des traces est Les éléments contenus dans la diagonale principale de la matrice, alors que la normale est juste La racine carrée du nombre total d'éléments contenus dans la matrice. En C++, une matrice peut Afficher à l’aide d’un tableau bidimensionnel. Ici nous avons choisi deux matrices de 5 lignes et 5 colonnes Exemple (25 éléments au total). La matrice doit être accessible via une instruction de boucle et manipulation d'index. Deux boucles imbriquées sont nécessaires car pour effectuer l'opération typique Lors du calcul, nous devons parcourir chaque élément. La complexité de ce programme est O(n2). Puisque le suivi ne nécessite que la diagonale principale, les index de lignes et de colonnes seront Même. Par conséquent, seule une boucle for est nécessaire. Déterminé en un temps O(n).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer