Bibliothèque standard C++<complex>
En mathématiques et en calculs d'ingénierie, nous devons souvent traiter des nombres complexes, comme dans le traitement du signal, les transformées de Fourier, l'analyse de circuits, etc.
La bibliothèque standard C++ fournit<complex>Le fichier d'en-tête permet de manipuler des nombres complexes aussi facilement que des nombres ordinaires.
Un nombre complexe est constitué d'une partie réelle et d'une partie imaginaire, sous la forme :
z = a + bi
Un nombre complexe est une combinaison d'un nombre réel et d'un nombre imaginaire, généralement représenté para + bi, oùaest la partie réelle,best la partie imaginaire,iest l'unité imaginaire, vérifianti^2 = -1。
En C++, le type complex eststd::complex<T>représenté, oùTpeut être n'importe quel type arithmétique, tel quefloat、doubleoulong double。
Pour utiliser<complex>Pour la bibliothèque, vous devez d'abord inclure ce fichier d'en-tête dans votre programme C++ :
#include <iostream> #include <complex>
Exemple
#include <complex> // fichier d'en-tête des nombres complexes
int main() {
std::complex<double> z1(3.0, 4.0); // 3 + 4i
std::complex<double> z2(1.0, -2.0); // 1 - 2i
std::cout << "z1 = " << z1 << std::endl;
std::cout << "z2 = " << z2 << std::endl;
}
Sortie :
z1 = (3,4) z2 = (1,-2)
Syntaxe de base
Créer des nombres complexes
std::complex<double> c(5.0, 3.0); // 创建一个复数 5 + 3i
Accès aux parties réelle et imaginaire
double realPart = c.real(); // 获取实部 double imagPart = c.imag(); // 获取虚部
Opérations de base sur les nombres complexes
Bibliothèque standard C++<complex>prend en charge les opérations de base suivantes :
- Addition :
operator+ - Soustraction :
operator- - Multiplication :
operator* - Division :
operator/ - Conjugué :
conj - Module :
abs - Argument :
arg
1. Obtenir les parties réelle et imaginaire
std::cout << "实部: " << z1.real() << std::endl; // 3 std::cout << "虚部: " << z1.imag() << std::endl; // 4
2. Quatre opérations arithmétiques de base :
Exemple
auto z4 = z1 - z2; // (2, 6)
auto z5 = z1 * z2; // (11, -2)
auto z6 = z1 / z2; // (-1, 2)
std::cout << "z1 + z2 = " << z3 << std::endl;
std::cout << "z1 * z2 = " << z5 << std::endl;
3. Fonctions courantes
Fichier d'en-tête<complex>fournit de nombreuses fonctions mathématiques liées aux nombres complexes.
Exemple
std::cout << "Module |z1| = " << std::abs(z1) << std::endl; // 5
std::cout << "Argument arg(z1) = " << std::arg(z1) << std::endl; // 0.927 (radians)
std::cout << "Conjugué conjugate(z1) = " << std::conj(z1) << std::endl; // (3,-4)
std::cout << "exp(z1) = " << std::exp(z1) << std::endl; // e^(3+4i)
std::cout << "sin(z1) = " << std::sin(z1) << std::endl;
std::cout << "cos(z1) = " << std::cos(z1) << std::endl;
4. Représentation en coordonnées polaires
Parfois, nous devons représenter les nombres complexes en coordonnées polaires (module + angle de phase).
Exemple
double r = 5.0; // Module
double theta = M_PI / 4; // 45 degrés
std::complex<double> z = std::polar(r, theta);
std::cout << "Nombre complexe polaire z = " << z << std::endl; // (3.53553,3.53553)
5. Paramètres de modèle
std::complex<T>C'est une classe modèle qui prend en charge différents types numériques :
std::complex<float>std::complex<double>(couramment utilisé)std::complex<long double>
Exemple
std::complex<double> zd(1.0, 2.0);
Exemple
Voici un exemple utilisant<complex>Un exemple simple du fichier d'en-tête, incluant la création de nombres complexes, les opérations de base et l'affichage des résultats.
Exemple
#include <complex>
int main() {
// Créer deux nombres complexes
std::complex<double> c1(5.0, 3.0); // 5 + 3i
std::complex<double> c2(2.0, -4.0); // 2 - 4i
// Afficher les nombres complexes
std::cout << "c1: " << c1 << std::endl; // (5,3)
std::cout << "c2: " << c2 << std::endl; // (2,-4)
// Addition de nombres complexes
std::complex<double> sum = c1 + c2;
std::cout << "Somme : " << sum << std::endl; // 7 - i
// Soustraction de nombres complexes
std::complex<double> diff = c1 - c2;
std::cout << "Différence : " << diff << std::endl; // 3 + 7i
// Multiplication de nombres complexes
std::complex<double> product = c1 * c2;
std::cout << "Produit : " << product << std::endl; // 22 - 14i
// Division de nombres complexes
std::complex<double> quotient = c1 / c2;
std::cout << "Quotient : " << quotient << std::endl; // -0.1 + 1.3i
// Conjugué complexe
std::complex<double> conjugate = std::conj(c1);
std::cout << "Conjugué de c1 : " << conjugate << std::endl; // 5 - 3i
// Module complexe
double modulus = std::abs(c1);
std::cout << "Module de c1 : " << modulus << std::endl; // sqrt(34) ≈ 5.83095
// Argument complexe (radians)
double argument = std::arg(c1);
std::cout << "Argument de c1 : " << argument << std::endl; // atan(3/5) ≈ 0.54042 rad
return 0;
}
Lorsque vous exécutez le programme ci-dessus, vous obtiendrez la sortie suivante :
c1: (5,3) c2: (2,-4) Sum: (7,-1) Difference: (3,7) Product: (22,-14) Quotient: (-0.1,1.3) Conjugate of c1: (5,-3) Modulus of c1: 5.83095 Argument of c1: 0.54042autres extensions