Diese Frage mag etwas rhetorisch klingen, aber ich stelle sie hier aus zwei Gründen:
- Ich habe eine Weile gebraucht, um herauszufinden, was C++ std::norm() anders macht als MATLAB / Oktave , damit andere hier darüber stolpern.
- Ich finde es merkwürdig, den Begriff
norm()
Funktion als etwas anderes (wenn auch eng verwandt) als das, was allgemein als Norm (oder L2-Norm, oder euklidische Norm, usw., usw.) angesehen wird
Speziell die C++-Standardbibliothek definiert norm()
für komplexe Zahlen das Quadrat des Moduls (oder des absoluten Werts) ist, wobei der Modul sqrt(a^2 + b^2) ist, wenn die komplexe Zahl die Form a + i*b hat.
Dies widerspricht meinem Verständnis der Norm, die, wenn sie als euklidische Norm angegeben wird (was dem hier verwendeten Modul entspricht), die Quadratwurzel der Summe der Quadrate ist. Ich referenziere Mathworld's Definition des komplexen Moduls .
Ist das auch bei anderen der Fall? Ich habe es bei der Portierung von Signalverarbeitungscode von Octave nach C++ entdeckt, und der einzige andere Ort, an dem ich Hinweise auf diesen Unterschied gefunden habe, war die GCC-Mailingliste.