Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Program C++ untuk mencari jejak dan normal bagi matriks tertentu

Program C++ untuk mencari jejak dan normal bagi matriks tertentu

WBOY
WBOYke hadapan
2023-08-30 10:37:051156semak imbas

Program C++ untuk mencari jejak dan normal bagi matriks tertentu

Sesetengah aplikasi boleh mendapat manfaat besar daripada penggunaan tatasusunan atau matriks dua dimensi. Nombor disimpan dalam baris dan lajur matriks. Menggunakan tatasusunan berbilang dimensi, kami Matriks 2D juga boleh ditakrifkan dalam C++. Dalam artikel ini kita akan belajar cara menggunakan C++ Tentukan normal dan surih bagi matriks yang diberi.

Punca kuasa dua bagi jumlah elemen dalam matriks ialah apa yang dipanggil Biasalah. Surih terdiri daripada semua komponen yang membentuk pepenjuru utama. biarlah kami Lihat perwakilan algoritma dalam kod C++.

Jejak Matriks

$begin{bmatrix} 8 & 5 & 3 aksara baris baharu 6 & 7& 1 baris baharu 2 & 4 & 9 aksara baris baharu tamat{bmatrix},$

Jumlah semua elemen pada pepenjuru utama: (8 + 7 + 9) = 24, iaitu surih matriks yang diberi

Dalam contoh sebelumnya, matriks 3 x 3 telah digunakan dan hasilnya ialah jumlah matriks Bilangan unsur dalam pepenjuru utama. Surih matriks boleh didapati dalam jumlah. biarlah kami Ia membantu untuk memahami jika kita melihat algoritma.

Algoritma

  • Baca matriks M sebagai input
  • Andaikan M mempunyai n baris dan n lajur
  • Jumlah: = 0
  • Untuk saya dari 1 hingga n, lakukan
    • jumlah := jumlah + M[ i ][ i ]​​i>
  • Tamat
  • Kembalikan jumlah

Contoh

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

Output

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

Matriks biasa

$begin{bmatrix} 8 & 5 & 3 aksara baris baharu 6 & 7& 1 baris baharu 2 & 4 & 9 aksara baris baharu tamat{bmatrix},$

Jumlah semua elemen: (8 + 5 + 3 + 6 + 7 + 1 + 2 + 4 + 9) = 45

Biasa: ( punca kuasa dua hasil tambah semua unsur) = √45 = 6.708

Dalam contoh sebelumnya, matriks 3 x 3 telah digunakan. Kami mula-mula mengira jumlah semua entrinya sebelum mencari punca kuasa duanya. Mari lihat algoritma untuk membantu kita memahami.

Algoritma

  • Baca matriks M sebagai input
  • Andaikan M mempunyai n baris dan n lajur
  • Jumlah dimulakan kepada 0
  • Untuk saya dari 1 hingga n, lakukan
    • Untuk j antara 1 hingga n, lakukan
      • jumlah := jumlah + M[ i ][ j ]​​i>
    • Tamat
  • Tamat
  • res := punca kuasa dua jumlah
  • Kembalikan hasil

Contoh

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

Output

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

Kesimpulan

Operasi normal dan surih tergolong dalam matriks. Kedua-dua proses ini memerlukan Matriks segi empat sama, inilah yang kita perlukan (kerana kita memerlukan segi empat sama surih). Jumlah surih ialah Unsur-unsur yang terkandung dalam pepenjuru utama matriks, manakala normal adalah adil Punca kuasa dua bagi jumlah bilangan unsur yang terkandung dalam matriks. Dalam C++, matriks boleh Paparkan menggunakan tatasusunan dua dimensi. Di sini kami telah memilih dua matriks 5 baris dan 5 lajur Contoh (jumlah 25 elemen). Matriks mesti diakses melalui pernyataan gelung dan manipulasi indeks. Dua gelung bersarang diperlukan kerana untuk melaksanakan yang biasa Apabila mengira, kita perlu mengulangi setiap elemen. Kerumitan program ini ialah O(n2). Memandangkan penjejakan hanya memerlukan pepenjuru utama, indeks baris dan lajur akan menjadi sama. Oleh itu, hanya gelung for diperlukan. Ditentukan dalam masa O(n).

Atas ialah kandungan terperinci Program C++ untuk mencari jejak dan normal bagi matriks tertentu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam