Чебычевские точки и точность с плавающей точкой - PullRequest
1 голос
/ 01 мая 2020

Я видел в своих примечаниях к лекции, что точки Чебычева, определенные (в обозначении MatLab) как

n = 20;
i = (1:n+1)';
% Chebychev
xi = 5*cos((2*i-1)*pi/(2*(n+1)))

, не симметричны c в [-1,1] в точности с плавающей запятой. Но, если использовать тригонометрию c тождество cos(x) = sin( pi/2 - x), примененную к точкам выше, он обнаруживает, что точки Чебычева

xxi = 5*sin(pi*(n+2-2*i)/(2*(n+1)))

теперь симметричны c в интервал.

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

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

Формула синуса использует точки, симметрично распределенные вокруг нуля, а формат косинуса - нет. Особенности формата с плавающей точкой, особенно гранулярность, с которой он представляет числа, симметричны c вокруг нуля, и поэтому вычисления, симметричные c вокруг нуля, дают результаты, симметричные c вокруг нуля.

Формула косинуса использует cos в точках (2 i −1) / (2 n + 2) π для 1 ≤ i ≤ n + 1. Для n = 20 эти точки составляют 1/42 π, 3/42 π, 5/42 π,… 41/42 π.

1/42 π составляет около 0,075. Наибольшая сила двух, не превышающая 0,075, равна 2 −4 . Когда 1/42 π вычисляется в формате бинарного IEEE-754, который имеет 53 бита в его значении, масштабирование с плавающей точкой таково, что наибольшая битовая позиция в значении представляет 2 −4 , и младшая битовая позиция представляет 2 -56 . Таким образом, результат должен быть округлен до ближайшего кратного 2 −56 . Напротив, 41/42 π составляет около 3,067, и позиция старшего бита его значения представляет 2 2 , в то время как позиция младшего бита представляет 2 -50 . Таким образом, результат должен быть округлен до ближайшего кратного 2 -50 , шкала в 64 раза больше, чем для 1/42 π. Таким образом, ошибки округления в вычислениях с плавающей запятой обычно различаются для 1/42 π и 41/42 π, для 3/42 π и 39/42 π и т. Д.

В формуле синуса используется sin в точках ( n + 2-2 i ) / (2 n + 2) π для 1 ≤ i ≤ n + 1. Для n = 20 эти точки составляют 20/42 π, 18/42 π, 16/42 π,… −16/42 π, −18/42 π, −20/42 π. При этом, когда 20/42 π и -20/42 π вычисляются в двоичном виде64, они оба используют одно и то же масштабирование для значимого. Таким образом, их ошибки округления идентичны, кроме знака, и вычисленные результаты идентичны, за исключением знакового бита. Аналогично, 18/42 π и −18/42 π используют одинаковое масштабирование, и все члены соединяются с симметричным c партнером, за исключением 0/42 π, но это ноль и ошибка вычисления (ноль) это симметрично c с самим собой.

Кроме того, типичные реализации подпрограммы sin симметричны c относительно нуля, так что sin(-x) и -sin(x) дают идентичные результаты. Как правило, они работают, уменьшая аргумент по модулю 2π (по крайней мере, в действительности) и оценивая полином, который приближает синус, и этот полином обычно симметричен c вокруг нуля (имеет все нечетные степени своей переменной x ). Таким образом, вычисление sin(x) и sin(-x) сохраняет симметрию, как и итоговое умножение на 5. (cos реализации могут иметь аналогичную симметрию, но, поскольку аргументы в этом случае уже асимметричны c, cos не может восстановить симметрию.)

1 голос
/ 01 мая 2020

Оба sin и cos имеют период 2 * пи, и, как вы знаете, эти две функции могут быть легко преобразованы друг в друга. Есть еще отношения, такие как sin (-x) = - sin (x), cos (-x) = cos (x), sin (x + 2pi) = sin (x), et c.

Ваш исходный набор точек отсчетов cos (x) на интервале 0,2 * пи. Это один полный период. Этого более чем достаточно для вычислительных целей; фактически интервал 0, пи / 2 уже достаточен. Другие значения cos (x) можно найти в вышеупомянутых соотношениях.

Теперь подстановка просто преобразует x ∈ 0,2 * pi в x '∈ -pi, + pi. Это все еще один полный период, но теперь симметричный около 0.

...