Je travaille avec un tableau de nombres complexes a
et un tableau de nombres réels b
(comme double).Utilisation de tableaux de nombres réels et de nombres complexes
typedef std::complex<double> Complex;
std::valarray<Complex> a(1024);
std::valarray<double> b(1024);
std::valarray<double> modulus = std::abs(a); // problem 1
std::valarray<Complex> modulus2 = std::abs(a); // this works but uses 2 times more memory :(
std::valarray<Complex> c = a * b; // problem 2
je rencontre deux problèmes (vivre runnable demo here):
Pour des raisons de gestion de la mémoire, comme la valeur absolue (ou "module") est un nombre réel , il devrait être possible de le stocker comme
std::valarray<double>
. Mais ici ça ne marche pas: il y a une erreurconversion from 'std::_Expr<std::_UnClos<std::_Abs, std::_ValArray, std::complex<double> >, std::complex<double> >' to non-scalar type 'std::valarray<double>' requested
. Comment stockermodulus
en tant questd::valarray<double>
?Il devrait être possible de multiplier
a
parb
et de stocker le résultat sous la forme d'un tableau de nombres complexes. Mais il y a cette erreur:no match for 'operator*' (operand types are 'std::valarray<std::complex<double> >' and 'std::valarray<double>')
. Comment faire cette multiplication de tableaux correctement?
On pourrait même dire que le comité a tout gâché. –
@BaummitAugen Je l'ai utilisé parce que je voulais être capable de faire des choses de haut niveau comme 'c = a * b' où a et b sont des tableaux, comme je le ferais en Python avec numpy ... Pensez-vous que je devrais utiliser autre chose? – Basj
Si j'étais vous, je chercherais une bibliothèque d'algèbre linéaire décente. La recherche simple avec votre moteur de recherche préféré vous donnera de meilleures alternatives. (Je suis entièrement d'accord que votre code devrait fonctionner si 'valarray' était sain d'esprit.) –