В какой ситуации может потребоваться ряд Тейлора для многочлена?

StackOverflow https://stackoverflow.com//questions/12678277

Вопрос

Мне трудно понять, почему было бы полезно использовать ряд Тейлора для функции, чтобы получить приближение функции, а не просто использовать саму функцию при программировании.Если я могу заставить свой компьютер вычислить e^(.1) и он выдаст мне точное значение, зачем мне вместо этого брать приближение?

Это было полезно?

Решение

Ряды Тейлора обычно не используются для аппроксимации функций.Обычно используется некоторая форма минимаксного полинома.

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

Для аппроксимации функций часто используются минимаксные полиномы.Минимаксный полином имеет минимально возможную максимальную ошибку для конкретной ситуации (интервал, на котором функция должна аппроксимироваться, степень, доступную для полинома).Обычно не существует аналитического решения для поиска минимаксного полинома.Их находят численно с помощью Алгоритм Ремеза.Минимаксные полиномы можно адаптировать в соответствии с конкретными потребностями, например минимизировать относительную или абсолютную ошибку, аппроксимировать функцию на определенном интервале и т. д.Для получения приемлемых результатов минимаксным полиномам требуется меньше членов, чем рядам Тейлора, и они «распространяют» ошибку по интервалу, вместо того, чтобы быть лучше в центре и хуже на концах.

Когда вы звоните в exp функция для вычисления eИкс, вы, скорее всего, используете минимаксный полином, потому что кто-то проделал всю работу за вас и создал библиотечную процедуру, вычисляющую этот полином.По большей части единственные арифметические операции, которые могут выполнять компьютерные процессоры, — это сложение, вычитание, умножение и деление.Поэтому на основе этих операций необходимо создавать другие функции.Первые три дают вам полиномы, а полиномов достаточно для аппроксимации многих функций, таких как синус, косинус, логарифм и возведение в степень (с некоторыми дополнительными операциями по перемещению объектов в поле экспоненты значений с плавающей запятой и из него).Деление добавляет рациональные функции, что полезно для таких функций, как арктангенс.

Другие советы

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

Во-вторых, у вас может быть функция, которую даже язык не поддерживает.

Недавно я хотел использовать справочные таблицы с интерполяцией, чтобы получить угол, а затем вычислить sin() и cos() этого угла.Проблема в том, что это DSP без операций с плавающей запятой и без тригонометрических функций, поэтому эти две функции очень медленные (программная реализация).Вместо этого я поместил в таблицу sin(x) вместо x, а затем использовал ряд Тейлора для y=sqrt(1-x*x), чтобы вычислить на его основе cos(x).Этот ряд Тейлора точен в нужном мне диапазоне, содержит всего 5 членов (все знаменатели представляют собой степени двойки!), может быть реализован с фиксированной точкой с использованием простого C и генерирует код, который работает быстрее, чем любой другой подход, о котором я мог подумать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top