stringtranslate.com

Пифагорейское сложение

В математике , Пифагорово сложение является бинарным действием над действительными числами , которое вычисляет длину гипотенузы прямоугольного треугольника , если даны его две стороны. Согласно теореме Пифагора , для треугольника со сторонами и , эта длина может быть вычислена как , где обозначает Пифагорово сложение. [1]

Эта операция может использоваться при преобразовании декартовых координат в полярные координаты . Она также обеспечивает простую нотацию и терминологию для некоторых формул, когда ее слагаемые сложны; например, соотношение энергии и импульса в физике становится Она реализована во многих библиотеках программирования как функция hypot , таким образом, чтобы избежать ошибок, возникающих из-за вычислений с ограниченной точностью, выполняемых на компьютерах. В своих приложениях к обработке сигналов и распространению неопределенности измерений та же операция также называется сложением в квадратуре ; [2] она связана со средним квадратичным или «средним квадратом».

Приложения

Пифагорово сложение находит длину диагонали тела прямоугольного кубоида или, что эквивалентно, длину векторной суммы ортогональных векторов .

Пифагоровое сложение (и его реализация в виде функции hypot) часто используется вместе с функцией atan2 для преобразования декартовых координат в полярные координаты : [3] [4]

Повторное сложение Пифагора может найти диаметр прямоугольного кубоида . Это наибольшее расстояние между двумя точками, длина диагонали тела кубоида. Для кубоида с длинами сторон , , и эта длина равна .

Если измерения имеют независимые ошибки , то квадратурный метод дает общую ошибку, тогда как верхний предел общей ошибки равен тому, если ошибки не были независимыми. [5]

В обработке сигналов сложение в квадратуре используется для нахождения общего шума от независимых источников шума. Например, если датчик изображения выдает шесть цифровых чисел дробового шума , три — шума темнового тока и два — шума Джонсона–Найквиста при определенных условиях, то общий шум представляет собой цифровые числа, [6] показывающие доминирование более крупных источников шума.

Среднеквадратичное значение конечного набора чисел равно их пифагорейской сумме. Это обобщенное среднее значение чисел.

Характеристики

Операция ассоциативна и коммутативна , [7] и Это означает , что действительные числа образуют коммутативную полугруппу .

Действительные числа ниже не являются группой , потому что никогда не могут произвести отрицательное число в качестве своего результата, тогда как каждый элемент группы должен быть результатом применения групповой операции к себе и единичному элементу . Для неотрицательных чисел это все еще не группа, потому что пифагорейское сложение одного числа со вторым положительным числом может только увеличить первое число, поэтому ни одно положительное число не может иметь обратный элемент . Вместо этого он образует коммутативный моноид для неотрицательных чисел с нулем в качестве его единицы.

Выполнение

Hypot — это математическая функция, определенная для вычисления длины гипотенузы прямоугольного треугольника. Она была разработана, чтобы избежать ошибок, возникающих из-за вычислений с ограниченной точностью, выполняемых на компьютерах. Вычисление длины гипотенузы треугольника возможно с помощью функции квадратного корня из суммы двух квадратов , но hypot позволяет избежать проблем, которые возникают при возведении в квадрат очень больших или очень маленьких чисел. Если вычислять с помощью натуральной формулы, квадраты очень больших или малых значений и могут выходить за пределы диапазона точности машины при вычислении на компьютере, что приводит к неточному результату, вызванному арифметическим переполнением и недогрузкой . Функция hypot была разработана для вычисления результата без возникновения этой проблемы. [8]

Если любой из входов в hypot бесконечен, результат тоже бесконечен. Поскольку это верно для всех возможных значений другого входа, стандарт IEEE 754 с плавающей точкой требует, чтобы это оставалось верным даже тогда, когда другой вход не является числом (NaN). [9]

Начиная с C++17 , появилась дополнительная функция hypot для 3D-вычислений: [10]

Порядок расчета

Трудность наивной реализации заключается в том, что может произойти переполнение или недополнение, если только промежуточный результат не вычисляется с повышенной точностью . Распространенный метод реализации заключается в том, чтобы при необходимости поменять значения так, чтобы , а затем использовать эквивалентную форму

Вычисление не может выйти за пределы, если и не равны нулю. Если происходит потеря значимости, конечный результат равен , что верно в пределах точности вычисления. Квадратный корень вычисляется из значения от 1 до 2. Наконец, умножение на не может выйти за пределы значимости и выходит за пределы, только когда результат слишком велик для представления. [8] Эта реализация имеет недостаток, заключающийся в том, что она требует дополнительного деления с плавающей точкой, что может удвоить стоимость наивной реализации, поскольку умножение и сложение обычно намного быстрее, чем деление и квадратный корень. Обычно реализация медленнее в 2,5–3 раза. [11]

Более сложные реализации позволяют избежать этого, разделяя входные данные на большее количество случаев:

Однако эта реализация чрезвычайно медленная, когда она приводит к неверным прогнозам прыжков из-за разных случаев. Дополнительные методы позволяют вычислять результат более точно, например, менее чем до одного ulp . [8]

Поддержка языков программирования

Функция сложения Пифагора присутствует как функция hypot во многих языках программирования и библиотеках, включая CSS , [12] C++11 , [13] D , [14] Fortran (начиная с Fortran 2008), [15] Go , [16] JavaScript (начиная с ES2015), [17] Julia , [18] Java (начиная с версии 1.5), [19] Kotlin , [20] MATLAB , [21] PHP , [22] Python , [23] Ruby , [24] Rust , [25] и Scala . [26]

В Metafont имеются встроенные операции сложения и вычитания Пифагора под названиями ++и +-+соответственно.

Смотрите также

Ссылки

  1. ^ Молер, Клив; Моррисон, Дональд (1983). «Замена квадратных корней пифагорейскими суммами». IBM Journal of Research and Development . 27 (6): 577–581. CiteSeerX  10.1.1.90.5651 . doi :10.1147/rd.276.0577.
  2. ^ Джонсон, Дэвид Л. (2017). "12.2.3 Сложение в квадратуре". Статистические инструменты для комплексной практики промышленной гигиены и наук об охране окружающей среды . John Wiley & Sons. стр. 289. ISBN 9781119143017.
  3. ^ "SIN (3M): Тригонометрические функции и их обратные". Руководство программиста Unix: Справочное руководство (4.3 Berkeley Software Distribution Virtual VAX-11 Version ed.). Кафедра электротехники и компьютерных наук, Калифорнийский университет, Беркли. Апрель 1986 г.
  4. ^ Beebe, Nelson HF (2017). Справочник по вычислению математических функций: программирование с использованием библиотеки переносимого программного обеспечения MathCW. Springer. стр. 70. ISBN 9783319641102.
  5. ^ Д. Б. Шнайдер, Анализ погрешностей в измерительных системах, Труды конференции лаборатории стандартов 1962 года, стр. 94
  6. ^ JT Bushberg et al, Основы физики медицинской визуализации, раздел 10.2.7, Wolters Kluwer Health
  7. ^ Фальмань, Жан-Клод (2015). «Вывод значимых научных законов из абстрактных, мысленных» аксиом: пять примеров». Математические уравнения . 89 (2): 393–435. дои : 10.1007/s00010-015-0339-1. МР  3340218. S2CID  121424613.
  8. ^ abc Борхес, Карлос Ф. (2021). «Алгоритм 1014: улучшенный алгоритм для hypot(x, y)». Труды ACM по математическому программному обеспечению . 47 (1): 9:1–9:12. arXiv : 1904.09481 . doi : 10.1145/3428446. S2CID  230588285.
  9. ^ Фог, Агнер (2020-04-27). «Отслеживание исключений с плавающей точкой и распространение NAN» (PDF) . стр. 6.
  10. ^ Общие математические функции std::hypot, std::hypotf, std::hypotl
  11. ^ Измерено на ARM и x64 (Intel и AMD) для разных компиляторов с максимальной оптимизацией для 32- и 64-битных чисел с плавающей точкой.
  12. ^ Cimpanu, Catalin. "CSS для поддержки тригонометрических функций". ZDNet . Получено 01.11.2019 .
  13. ^ «Hypot - Справочник по C++».
  14. ^ "STD.math - Язык программирования D".
  15. ^ "Новые возможности Fortran 2008" (PDF) .
  16. ^ "Математический пакет - математика - PKG.go.dev".
  17. ^ "Math.hypot() - JavaScript | MDN". 21 февраля 2023 г.
  18. ^ «Математика · Язык Джулии».
  19. ^ «Математика (платформа Java 2 SE 5.0)» .
  20. ^ "hypot - язык программирования Kotlin". Kotlin . Получено 2018-03-19 .
  21. ^ "Квадратный корень из суммы квадратов (Гипотенуза) - MATLAB hypot - MathWorks Benelux".
  22. ^ "PHP: Гипотеза - Руководство".
  23. ^ «Математика — Математические функции — Документация Python 3.9.7».
  24. ^ "Модуль: Математика (Ruby 3.0.2)".
  25. ^ "F64 - Ржавчина".
  26. ^ "Стандартная библиотека Scala 2.13.6 - scala.math".

Дальнейшее чтение