Пифагорово сложение
В математике — сложение Пифагора это бинарная операция над действительными числами , которая вычисляет длину гипотенузы прямоугольного треугольника по двум его сторонам. По теореме Пифагора для треугольника со сторонами и , эту длину можно рассчитать как где обозначает операцию сложения Пифагора. [1]
Эту операцию можно использовать при преобразовании декартовых координат в полярные координаты . Он также предоставляет простые обозначения и терминологию для некоторых формул, когда их слагаемые сложны; например, соотношение энергии-импульса в физике становится Она реализована во многих библиотеках программирования как гипот -функция таким образом, чтобы избежать ошибок, возникающих из-за вычислений с ограниченной точностью, выполняемых на компьютерах. В приложениях к обработке сигналов и распространению та неопределенности измерений же операция также называется сложением в квадратуре ; [2] это связано со средним квадратичным или «среднеквадратическим значением».
Приложения
[ редактировать ]Сложение Пифагора (и его реализация в виде гипот-функции) часто используется вместе с функцией atan2 для преобразования из декартовых координат. в полярные координаты : [3] [4]
Если измерения имеют независимые ошибки соответственно, метод квадратур дает общую ошибку, тогда как верхний предел общей ошибки равен если бы ошибки не были независимыми. [5]
Это эквивалентно нахождению величины результата сложения ортогональных векторов , каждый из которых имеет величину, равную неопределенности, с использованием теоремы Пифагора .
При обработке сигналов квадратурное сложение используется для определения общего шума от независимых источников шума. Например, если датчик изображения выдает шесть цифр дробового шума , три — темнового шума и два — шума Джонсона-Найквиста при определенных условиях, общий шум равен цифровые номера, [6] показывая доминирование более крупных источников шума.
Среднеквадратичное значение конечного набора числа — это просто их пифагорова сумма, нормализованная до обобщенного среднего путем деления на .
Характеристики
[ редактировать ]Операция ассоциативен и коммутативен , [7] и Это означает, что реальные цифры под образуют коммутативную полугруппу .
Реальные цифры под не группа , потому что никогда не может дать в качестве результата отрицательное число, тогда как каждый элемент группы должен быть результатом применения групповой операции к самому себе и единичному элементу . Для неотрицательных чисел это все же не группа, потому что пифагорейское сложение одного числа на второе положительное число может только увеличить первое число, поэтому ни одно положительное число не может иметь обратный элемент . Вместо этого он образует коммутативный моноид неотрицательных чисел с нулем в качестве его единицы.
Выполнение
[ редактировать ]Гипота — это математическая функция, предназначенная для расчета длины гипотенузы прямоугольного треугольника. Он был разработан, чтобы избежать ошибок, возникающих из-за вычислений с ограниченной точностью, выполняемых на компьютерах. Вычислить длину гипотенузы треугольника можно с помощью функции извлечения квадратного корня из суммы двух квадратов , но гипотеза позволяет избежать проблем, возникающих при возведении в квадрат очень больших или очень маленьких чисел. Если рассчитывать по натуральной формуле, квадраты очень больших или малых значений и может выйти за пределы машинной точности при расчете на компьютере, что приведет к неточному результату, вызванному арифметическим недостатком и переполнением . Функция гипот была разработана для вычисления результата, не вызывая этой проблемы. [8]
Если любой вход в гипотезу бесконечен, результат бесконечен. Поскольку это верно для всех возможных значений другого входного сигнала, стандарт IEEE 754 с плавающей запятой требует, чтобы это оставалось истинным, даже если другой входной сигнал не является числом (NaN). [9]
Начиная с C++17 , появилась дополнительная гипот-функция для 3D-расчетов: [10]
Порядок расчета
[ редактировать ]Трудность с наивной реализацией заключается в том, что может переполняться или опустошаться, если только промежуточный результат не вычисляется с повышенной точностью . Распространенный метод реализации заключается в обмене значениями, если это необходимо, так, чтобы , а затем использовать эквивалентную форму
Вычисление не может переполниться, если только оба и равны нулю. Если происходит переток, конечный результат равен , что верно в пределах точности расчета. Квадратный корень вычисляется из значения от 1 до 2. Наконец, умножение на не может переполниться и переполняется только тогда, когда результат слишком велик для представления. [8] Недостатком этой реализации является то, что она требует дополнительного деления с плавающей запятой, что может удвоить стоимость простой реализации, поскольку умножение и сложение обычно выполняются намного быстрее, чем деление и извлечение квадратного корня. Обычно реализация происходит медленнее в 2,5–3 раза. [11]
Более сложные реализации позволяют избежать этого, разделив входные данные на большее количество случаев:
- Когда намного больше, чем , до , с точностью машины .
- Когда переполняется, умножаем оба и с небольшим коэффициентом масштабирования (например, 2 −64 для одинарной точности IEEE), используйте простой алгоритм, который теперь не будет переполняться, и умножьте результат на (большое) обратное значение (например, 2 64 ).
- Когда при меньшем потоке, масштабируйте, как указано выше, но поменяйте коэффициенты масштабирования, чтобы увеличить промежуточные значения.
- В противном случае наивный алгоритм безопасен в использовании.
Однако эта реализация работает чрезвычайно медленно, поскольку из-за различных случаев она приводит к неправильным предсказаниям прыжков. Дополнительные методы позволяют вычислить результат более точно, например, с точностью менее одного ulp . [8]
Поддержка языков программирования
[ редактировать ]Функция присутствует во многих языках программирования и библиотеках, в том числе CSS , [12] С++11 , [13] Д , [14] Идти , [15] JavaScript (начиная с ES2015), [16] Юля , [17] Java (начиная с версии 1.5), [18] Котлин , [19] МАТЛАБ , [20] PHP , [21] Питон , [22] Руби , [23] Ржавчина , [24] и Скала . [25]
См. также
[ редактировать ]- Евклидово расстояние
- Алгоритм альфа-макс плюс бета-мин
- В Metafont есть встроенные операции сложения и вычитания Пифагора под названиями
++
и+-+
соответственно.
Ссылки
[ редактировать ]- ^ Молер, Клив; Моррисон, Дональд (1983). «Замена квадратных корней суммами Пифагора». Журнал исследований и разработок IBM . 27 (6): 577–581. CiteSeerX 10.1.1.90.5651 . дои : 10.1147/rd.276.0577 .
- ^ Джонсон, Дэвид Л. (2017). «12.2.3 Сложение в квадратуре» . Статистические инструменты для комплексной практики наук о промышленной гигиене и гигиене окружающей среды . Джон Уайли и сыновья. п. 289. ИСБН 9781119143017 .
- ^ «СИН (3М): Тригонометрические функции и их обратные» . Руководство программиста Unix: Справочное руководство (ред. 4.3 Berkeley Software Distribution Virtual VAX-11). Кафедра электротехники и информатики Калифорнийского университета в Беркли. Апрель 1986 года.
- ^ Биб, Нельсон Х.Ф. (2017). Справочник по математическим вычислениям: программирование с использованием портативной библиотеки программного обеспечения MathCW . Спрингер. п. 70. ИСБН 9783319641102 .
- ^ Д. Б. Шнайдер, Анализ ошибок в измерительных системах , Материалы конференции лаборатории стандартов 1962 года, стр. 94
- ^ Дж. Т. Бушберг и др., Основы физики медицинской визуализации , раздел 10.2.7, Wolters Kluwer Health.
- ^ Фальмань, Жан-Клод (2015). «Вывод значимых научных законов из абстрактных, «мысленных» аксиом: пять примеров». Математические уравнения . 89 (2): 393–435. дои : 10.1007/s00010-015-0339-1 . МР 3340218 . S2CID 121424613 .
- ↑ Перейти обратно: Перейти обратно: а б с Борхес, Карлос Ф. (2021). «Алгоритм 1014: Улучшенный алгоритм для гипотезы (x, y)». Транзакции ACM в математическом программном обеспечении . 47 (1): 9:1–9:12. arXiv : 1904.09481 . дои : 10.1145/3428446 . S2CID 230588285 .
- ^ Туман, Агнер (27 апреля 2020 г.). «Отслеживание исключений с плавающей запятой и распространение NAN» (PDF) . п. 6.
- ^ Общие математические функции std::hypot, std::hypotf, std::hypotl
- ^ Измерено на ARM и x64 (Intel и AMD) для разных компиляторов с максимальной оптимизацией для 32-битных и 64-битных чисел с плавающей запятой.
- ^ Чимпану, Каталин. «CSS для поддержки функций тригонометрии» . ЗДНет . Проверено 1 ноября 2019 г.
- ^ «Hypot — Справочник по C++» .
- ^ «STD.math — Язык программирования D» .
- ^ «Математический пакет — математика — PKG.go.dev» .
- ^ «Math.hypot() — JavaScript | MDN» . 21 февраля 2023 г.
- ^ «Математика · Язык Юлии» .
- ^ «Математика (платформа Java 2 SE 5.0)» .
- ^ «гипот — язык программирования Котлин» . Котлин . Проверено 19 марта 2018 г.
- ^ «Квадратный корень из суммы квадратов (гипотенуза) — гипот MATLAB — MathWorks Benelux» .
- ^ «PHP: Hypot — Руководство» .
- ^ «Математика — Математические функции — Документация Python 3.9.7» .
- ^ «Модуль: Математика (Ruby 3.0.2)» .
- ^ «F64 — Ржавчина» .
- ^ «Стандартная библиотека Scala 2.13.6 — scala.math» .
Дальнейшее чтение
[ редактировать ]- Дюбрюлль, Огюстен А. (1983). «Класс численных методов вычисления сумм Пифагора» (PDF) . Журнал исследований и разработок IBM . 27 (6): 582–589. CiteSeerX 10.1.1.94.3443 . дои : 10.1147/rd.276.0582 . .