Ай да Пафнутий Львович!

Sep 14, 2021 17:47

Решил ещё немного поковыряться со своим арктангенсом. Хотел применить алгоритм Ремеза, но начал с узлов Чебышёва.

И для начала со своего "линейного приближения", atan(y/x)≈ky. Всеми правдами и неправдами, решив численно нелинейное уравнение (точнее, отдав его на растерзание WolframAlpha), получил значение k=1,00120570556

А вот Чебышёвский подход: мы хотим приблизить эту функцию на углах от -5,625° до +5,625°, чему соответствует y на отрезке [-A;A] = [-0,098; 0,098], и мы просто выбираем, в каких точках хотим ТОЧНЫЙ ответ. Для линейного приближения точный ответ может достигаться в ТРЁХ точках. Но эти точки - не просто края отрезка и его середина, а величины



где n=3 - количество точек, k=1..3 - номер точки. Получаются значения y1 = A·cos(π/6)≈0,084885, y2=0, y3=-A·cos(π/6). Точное равенство в нуле получается "автоматом". А из одной из оставшихся точек найдём k, также потребовав точного равенства:





То есть, 6 значащих разрядов мы получили точно! Если помножить на 32768, получим 32807,48, что мы округлим до 32807 - это будет наше целочисленное представление. А то значение, что мы нашли в прошлый раз, при умножении на 32768 даст 32807,51 и будет округлено до 32808. Ну, почти :))

А может и в более сложной задаче нам Чебышёв поможет?


Опять у нас значения x,y, x2+y2=1, поэтому для наших выкладок можно использовать x=cos(z), y=sin(z), z - по сути и есть тот угол, который мы пытаемся найти.

И мы пытаемся использовать следующее приближение:


Точного равенства мы можем потребовать в 5 точках при углах от -45° до +45°: нулевая, две для отрицательных углов и две для положительных. В нуле равенство выходит "автоматом", в отрицательных углах - также "автоматом", если в положительных всё выполнено, поскольку функция нечётная, что одна, что другая.

Попробуем, что ль, расположить УГЛЫ по узлам Чебышёва:





В этих двух углах и потребуем точного равенства:


Это система линейных уравнений относительно α и β из которой выходит:

α=1,385542123
β=-0,389937638

Очень похоже на то, что мы находили в прошлый раз, но теперь максимальная ошибка стала ещё меньше: 0,039°, или 2,36 угловых минут!

И график ошибки:




О как: в пол-пинка, безо всяких интегралов, улучшили наш результат, не шибко сильно, на 5%. Что же будет, если сюда ещё Ремеза натравить? Впрочем, думаю, ещё пару процентов удастся "выгрызть", не более. Ведь график уже вполне себе Чебышёвский: ТРИЖДЫ ошибка практически достигает своего максимума! По одноимённой теореме, оптимальное приближение ровно так и должно себя вести.

странные девайсы, математика, ПЛИС, программки, работа

Previous post Next post
Up