Аппроксимация синуса: полиномы Чебышёва vs. ряды Маклорена

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

В комментариях к моей статье про быстрое вычисление синуса был задан вопрос: "А чем не устроило разложение в ряд Тейлора?"
Краткий ответ таков: хоть приближение при помощи рядов Тейлора (точнее - рядами Маклорена) и даёт меньшую ошибку при том же количестве вычислений, но оно не позволяет разбить аргумент на произвольное количество интервалов и тем самым увеличить точность вычислений.

Теперь более подробно.

При приближении синуса (и не только) полиномами Чебышёва используют следующее выражение:

y(x) \approx A_{0} + A_{1}\cdot x + A_{2}\cdot x^{2} + A_{3}\cdot x^{3} + \cdots

При этом коэффициенты А0, А1 и т.д. рассчитываются заранее для какого-то участка функции.

При помощи рядов Маклорена синус вычисляется по следующей формуле:

sin(x) \approx x - \frac{x^{3}}{3!} + \frac{x^{5}}{5!} - \frac{x^{7}}{7!} + \frac{x^{9}}{9!} - \frac{x^{11}}{11!} + \cdots

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

sin(x) \approx x \left (1-\frac{x^{2}}{2\cdot3}\cdot \left(1-\frac{x^{2}}{4\cdot5} \cdot \left(1-\frac{x^{2}}{6\cdot7}\cdot \left(\cdots \right) \right) \right) \right)

или так:

sin(x)\approx x \cdot \left ( 1  + x^2\cdot\left ( - \frac{1}{3!} + x^2\cdot\left ( \frac{1}{5!} + x^2 \cdot \left ( - \frac{1}{7!}  + \cdots  \right ) \right ) \right ) \right )

Для примера найдём значения синуса на интервале от 0 до \pi /2обоими методами, и постоим их графики вместе с графиком "настоящего" синуса. Возьмём полином Чебышёва 2-й степени (с тремя членами), и с тем же количеством членов возьмём ряд Маклорена:

Картинка кликабельна
Картинка кликабельна

График многочлена Чебышёва представляет собой фрагмент параболы, и пересекает график синуса в трёх точках, являющимися корнями многочлена.
График ряда Маклорена, начиная с левого края, почти совпадает с графиком синуса, и расхождение с ним начинается заметно на глаз только в правой трети диаграммы.

Графики ошибок аппроксимации выглядят так:

На них видно, что ошибка приближения полиномом Чебышёва в разы больше таковой у ряда Маклорена.

Теперь давайте посмотрим, как ошибки аппроксимации зависят от количества членов аппроксимирующей функции.
Графики ошибок аппроксимации рядами Маклорена разной длины выглядят так:

Графики ошибок аппроксимации полиномами Чебышёва имеют следующий вид:

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

На следующей диаграмме показана сравнительная точность аппроксимации обоими методами в зависимости от количества членов ряда (полинома). Точность выражена в "дробных битах", численно равных минус логарифму ошибки по основанию 2:

Вычисления производились с использованием 80-битных числе с плавающей запятой (тип long double). Результаты аппроксимации сравнивались со значением синуса, полученными стандартной функцией sinl() из библиотеки С компилятора gcc.

Приближение при помощи рядов Маклорена (зелёная линия) даёт большую точность по сравнению с полиномами Чебышёва (синяя линия). Точность не растёт выше какого-то предела, это связано с ошибками округления при вычислениях.
Однако для аппроксимации полиномами Чебышёва полный период (от 0 до 2 \piможно разбить не на 4, как это делалось до сих пор, а, например, на 512 равных интервалов. На диаграмме этот случай представлен серой линией. Точность в 53.94 бита уже при 6 членах (полином 5-й степени) превышает таковую у ряда Маклорена в 51.62 бита при 10 членах ряда.

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

Источник: https://habr.com/ru/post/582534/


Интересные статьи

Интересные статьи

Все «за» и «против» 1С-Битрикс, какие есть альтернативы и что выгоднее знать разработчику? Читать далее
SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накоп...
Статья о том, как упорядочить найм1. Информируем о вакансии2. Ведём до найма3. Автоматизируем скучное4. Оформляем и выводим на работу5. Отчитываемся по итогам6. Помогаем с адаптацией...
На работе я занимаюсь поддержкой пользователей и обслуживанием коробочной версии CRM Битрикс24, в том числе и написанием бизнес-процессов. Нужно отметить, что на самом деле я не «чист...
Если в вашей компании хотя бы два сотрудника, отвечающих за работу со сделками в Битрикс24, рано или поздно возникает вопрос распределения лидов между ними.