Tableau de nombres complexes
Fermé
ismailk
Messages postés
1
Date d'inscription
vendredi 17 avril 2015
Statut
Membre
Dernière intervention
17 avril 2015
-
17 avril 2015 à 12:18
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 8 mai 2015 à 01:26
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 8 mai 2015 à 01:26
A voir également:
- Tableau de nombres complexes
- Tableau croisé dynamique - Guide
- Tableau ascii - Guide
- Tableau word - Guide
- Trier tableau excel - Guide
- Tableau coefficient marge ✓ - Forum Excel
1 réponse
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
Modifié par mamiemando le 8/05/2015 à 01:34
Modifié par mamiemando le 8/05/2015 à 01:34
Ton erreur est due à la manière dont tu initialises tes nombres complexes. Par exemple pour créer le nombre complexe z = a + i.b il ne faut pas écrire :
... mais plutôt :
En effet dans le premier cas tu recopies de quelque chose qui est vu comme un int égal à b dans un complexe. Concrètement le complexe vaut alors z = b. Dans le second tu construis bien z = a + i.b.
Pour t'en convaincre :
... produit :
Du coup ensuite, pas spécialement de problème pour écrire par exemple :
... qui produit (presque) le résultat attendu :
... c'est à dire successivement 1, sqrt(2) * (1 + i) / 2, i, sqrt(2) * (-1 + i) / 2, -1, etc.
Bonne chance
complex<double> z = (a, b) FAUX
... mais plutôt :
complex<double> z (a, b) // a + ib // ok, on appelle le constructeur
En effet dans le premier cas tu recopies de quelque chose qui est vu comme un int égal à b dans un complexe. Concrètement le complexe vaut alors z = b. Dans le second tu construis bien z = a + i.b.
Pour t'en convaincre :
#include <iostream> #include <cmath> #include <cstdint> #include <complex> template <typename T> std::ostream & operator << ( std::ostream & os, const std::complex<T> & z ) { os << std::real(z) << " + " << std::imag(z) << 'i'; return os; } int main() { std::complex<double> z1 (10.0, 1.0); // OK std::complex<double> z2 = (10.0, 1.0); // Faux std::cout << "z1 = " << z1 << std::endl << "z2 = " << z2 << std::endl; return 0; }
... produit :
z1 = 10 + 1i
z2 = 1 + 0i
Du coup ensuite, pas spécialement de problème pour écrire par exemple :
#include <iostream> #include <cmath> #include <cstdint> #include <complex> template <typename T> std::ostream & operator << ( std::ostream & os, const std::complex<T> & z ) { os << std::real(z) << " + " << std::imag(z) << 'i'; return os; } int main() { for (unsigned i = 0; i < 8; i++) { double angle = M_PI * i / 4; std::complex<double> z (cos(angle), sin(angle)); std::cout << z << std::endl; } return 0; }
... qui produit (presque) le résultat attendu :
1 + 0i
0.707107 + 0.707107i
6.12323e-17 + 1i
-0.707107 + 0.707107i
-1 + 1.22465e-16i
-0.707107 + -0.707107i
-1.83697e-16 + -1i
0.707107 + -0.707107i
... c'est à dire successivement 1, sqrt(2) * (1 + i) / 2, i, sqrt(2) * (-1 + i) / 2, -1, etc.
Bonne chance