nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

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

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

И для начала со своего "линейного приближения", 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%. Что же будет, если сюда ещё Ремеза натравить? Впрочем, думаю, ещё пару процентов удастся "выгрызть", не более. Ведь график уже вполне себе Чебышёвский: ТРИЖДЫ ошибка практически достигает своего максимума! По одноимённой теореме, оптимальное приближение ровно так и должно себя вести.
Tags: ПЛИС, математика, программки, работа, странные девайсы
Subscribe

  • Великая Октябрьская резня бензопилой

    Сегодня прокатился прочистить Абрамцевскую просеку. Как обычно, с приключениями. Выезжал на велосипеде, а вернулся на самокате. Первый раз по этим…

  • Очередная несуразность в единицах измерения

    Когда-то я написал программу PhysUnitCalc - калькулятор, умеющий работать с размерностями. Мне казалось, что я наступил уже на все грабли, которые…

  • Big Data, чтоб их... (3)

    "В предыдущих сериях": мой прибор выдаёт 6 значений: 3 координаты и 3 угла, т.е все 6 степеней свободы твёрдого тела. Причём ошибки измерения этих 6…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 2 comments