Это может звучать как риторический вопрос, но я задаю его здесь по двум причинам:
- Мне потребовалось некоторое время, чтобы понять, что C ++ std :: norm () делает не так, как Matlab / Octave, поэтому другие могут наткнуться на это здесь.
- Мне кажется странным определять функцию
norm()
как нечто иное (хотя и тесно связанное) с тем, что обычно считается нормой (или нормой L2, или евклидовой нормой и т. Д. И т. П.)
В частности, стандартная библиотека C ++ определяет norm()
для комплексных чисел, которые должны быть квадратом модуля (или абсолютного значения), где модуль равен sqrt (a ^ 2 + b ^ 2), когда комплексное число находится в форме a + i * b.
Это идет вразрез с моим пониманием нормы, которая, будучи указана как евклидова норма (которая соответствует используемому здесь модулю), является квадратным корнем из суммы квадратов. Я буду ссылаться на определение Mathworld комплексного модуля .
Это то, с чем столкнулись другие? Я обнаружил это в результате переноса некоторого кода обработки сигналов из Octave на C ++, и единственное место, где я нашел ссылку на это различие, было в списке рассылки GCC (невозможно опубликовать ссылку из-за ограничения в 1 ссылку).