Разное

Разложение в ряд тейлора функции: Ряды Тейлора и Маклорена. Разложение функций на практике

Реализация ряда Тейлора на Python / Хабр

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

Когда я впервые столкнулся с рядами Тейлора в рамках своего бакалаврского курса, особого впечатления они на меня не произвели — я отнесся к ним как к вполне себе рядовой теме. Но недавно, готовясь к GRE Mathematics Subject Test, я наконец проникся и решил реализовать их на Python.

(n)(x) — для определения коэффициентов полинома. Следовательно, ряд Тейлора может быть определен для f(x), только если она бесконечно дифференцируема. Члены ряда определяются выражением

Где а является центром ряда Тейлора (прим. ред.: этот термин используется англоязычным сообществом, а русскоязычное в основном оперирует окрестностью точки а). Если центр ряда равен 0, т. е. a=0, то ряд называют рядом Маклорена.

Чтобы программно сформировать ряд Тейлора для функции, все, что от нас требуется, это вычислить коэффициенты

для достаточного количества членов. Опять же напомню, что чем больше членов ряда Тейлора мы будем использовать, тем точнее будет аппроксимация. К счастью, в пакете Python scipy уже есть встроенная функция для вычисления производной функции в заданной точке. Именно ее мы и будем использовать для определения коэффициентов искомого полинома.

from scipy.misc import derivative
import math
class TaylorSeries():
    def __init__(self, function, order, center=0):
        self. center = center
        self.f = function 
        self.order = order
        self.d_pts = order*2
        self.coefficients = []
        # количество точек (order) для scipy.misc.derivative
        if self.d_pts % 2 == 0: # must be odd and greater than derivative order
            self.d_pts += 1
        self.__find_coefficients()
    def __find_coefficients(self):
        for i in range(0, self.order+1):
            self.coefficients.append(round(derivative(self.f, self.center, n=i, order=self.d_pts)/math.factorial(i), 5))

Приведенная выше логика начинается с определения класса для хранения информации о ряде Тейлора. Конструктор принимает указатель на функцию (function) для которой мы формируем ряд Тейлора, порядок (

order) ряда Тейлора (то есть количество членов) и центр (center) ряда, который по умолчанию соответствует ряду Маклорена (т.е. равен нулю). Некоторые переменные, которые используются в функции scipy.misc.derivative, вычисляются на лету из уже предоставленных нами данных. {}».format(self.center, i) if i > 0 else «») + » + » eqn_string = eqn_string[:-3] if eqn_string.endswith(» + «) else eqn_string print(eqn_string) def print_coefficients(self): print(self.coefficients) def get_coefficients(self): «»» Возвращает коэффициенты ряда Тейлора «»» return self.coefficients

Первая функция, print_equation(…), выводит ряд Тейлора как уравнение с центром в центре ряда. print_coefficients(…) просто выведет список с коэффициентами, а

get_coefficients(…) вернет его.

Приведенный ниже код используется для нахождения коэффициентов ряда Тейлора, представляющего функцию f(x):

from TaylorSeries import TaylorSeries
def f(x):
    return 2 + x**3 + x**7 + x**2
if __name__ == '__main__':
    terms = 15
    center = 0
    precision = 3
    ts = TaylorSeries(f, terms, center)
    ts.print_coefficients()
    ts.print_equation()

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

Применения ряда Тейлора

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

Бесполезное

Дифференцирование

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

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

В нашей Python-логике эти вычисления будут выполняются с помощью функции, приведенной ниже:

def approximate_derivative(self, x):
    """
        Приблизительно вычисляет производную функции f(x) по ее ряду Тейлора. (n-1)
    return value

В этой функции аппроксимация производной функции находится путем перебора коэффициентов, вычисления значений производной, как описано выше, и их суммирования. Подстановка значений в эту функцию обеспечивает точную аппроксимацию производной базовой функции. Ниже приведены результаты для cos(x):

x

f(x)

Approx. f'(x)

0

1.0

0.0

pi/6

0.866

-0.5

pi/4

0.707

-0.707

pi/3

0.5

-0.866

pi/2

0. 0

-1.0

pi

-1

-0.042

Выше приведены значения аппроксимированной функции cos(x) и ее производной (обратите внимание, что фактическая производная равна

-sin(x)) в точках 0, 𝝿/6, 𝝿/4, 𝝿/3, 𝝿/2 и 𝝿. Глядя на значения в нескольких этих точках, мы видим, что в целом получили хорошую аппроксимацию производной cos(x). Например, в точке 𝝿/4 значение функции равно 0,707 = sqrt(2)/2, как и его производная -0,707, что является правильным значением.

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

Полезные

Аппроксимация значений

Одной из широко используемых целей ряда Тейлора является аппроксимация значений базовой функции. Для того, чтобы получить приблизительное значение функции, в члены ряда Тейлора подставляется x, а затем они складываются вместе. В Python-логике это выглядит следующим образом:

def approximate_value(self, x):
    """
				Аппроксимирует значение f(x) с помощью полинома Тейлора.
        x = точка аппроксимации f(x)
    """
    fx = 0
    for i in range(len(self.coefficients)):
        fx += self.coefficients[i] * ((x - self.center)**i)  # coefficient * nth term 
    return fx

Определенный интеграл

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

Здесь мы опять сталкиваемся со степенной функцией, но на этот раз интегрируем ее и умножаем на соответствующий коэффициент ряда Тейлора.

Однако численно мы можем рассчитать только определенный интеграл функции, так как в противном случае отсутствие значения для константы интегрирования может привести к неправильным результатам. Рассмотрим ряд Тейлора для f(x) = sin(x) с центром в 0:

интегрирование этого полинома член за членом дает следующий полином

Теперь предположим, что это корректная аппроксимация интеграла sin(x) (для которой мы знаем фактический интеграл -cos(x)) и попытаемся вычислить эту функцию в 0. Значение от этого равно 0. В этом случае это можно скорректировать, установив константу интегрирования C = -1. Но нам нужно определить эту константу для каждого значения в области определения функции только для того, чтобы “исправить” интегралы, что делает бесконечное интегрирование бесполезным.

С другой стороны, определенные интегралы можно легко вычислить, интегрируя ряд Тейлора почленно и подставляя пределы интегрирования, как показано в Python-коде ниже. x*sin(x). В целях сокращения длины этой статьи эти результаты будут опущены. Для тех, кто сомневается, полный код будет приведен ниже. Меняйте def f(x) и проверяйте результаты самостоятельно.

Лимиты

Вместо того, чтобы показывать, как численно аппроксимировать лимиты и реализовывать это в Python, я просто приведу пример лимита, который может быть трудно определить аналитически, но его легко найти в форме ряда Тейлора.

Рассмотрим такой лимит:

Этот лимит можно легко определить, применяя правило Лопиталя, так как он имеет форму 0/0, но давайте предположим на минуту, что мы этого не знаем (или что мы ничего не знаем о правиле Лопиталя). Как нам тогда определить этот предел? Оказывается, в этом нам может помочь ряд Тейлора, заменяющий sin(x) в пределе аппроксимацией. В этом примере будет использоваться ряд Тейлора с тремя членами:

Поскольку лимит x²/120 стремится к 0, результат равен -1/6, как и ожидалось, при оценке по правилу Лопиталя.

Заключение

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

Листинг кода

usage.py

from TaylorSeries import TaylorSeries
import math
def f(x):
    return math.cos(x) #(math.e**x)*math.sin(x)*math.cos(x)
if __name__ == '__main__':
    pts = [0, math.pi/6, math.pi/4, math.pi/3, math.pi/2, math.pi]
    # pts = [-5, -4, -3, -2, -1, -0.1, 0, 0.1, 1, 2, 3, 4, 5]
    terms = 15
    center = 0
    precision = 3
    ts = TaylorSeries(f, terms, center)
    ts.print_coefficients()
    ts.print_equation()
    
    print("x\tf(x)\tApprox. f(x)\tIntegral f(x)\tDerivative f(x)")
    for x in pts:
        print("{:.3f}\t{:.3f}\t{:.3f}\t{:.3f}\t{:.3f}".format(x, f(x), ts.approximate_value(x), ts.approximate_integral(0, x), ts.approximate_derivative(x)))

TaylorSeries.

{}».format(self.center, i) if i > 0 else «») + » + » eqn_string = eqn_string[:-3] if eqn_string.endswith(» + «) else eqn_string print(eqn_string) def print_coefficients(self): print(self.coefficients) def approximate_value(self, x): «»» Аппроксимирует значение f(x) с помощью полинома Тейлора. x = точка аппроксимации f(x) «»» fx = 0 for i in range(len(self.coefficients)): fx += self.coefficients[i] * ((x — self.center)**i) # coefficient * nth term return fx def approximate_derivative(self, x): «»» Приблизительно вычисляет производную функции f(x) по ее ряду Тейлора. Бесполезно, так как нам нужна производная самой функции, чтобы построить ряд Тейлора. «»» value = 0 for i in range(1, len(self.coefficients)): # skip the first value (constant) as the derivative is 0 value += self.coefficients[i] * i * ((x — self.center)**(i-1)) # differentiate each term: x^n => n*x^(n-1) return value def approximate_integral(self, x0, x1): «»» Вычисляет определенный интеграл функции, используя разложение в ряд Тейлора. (n+1) return value def get_coefficients(self): «»» Возвращает коэффициенты ряда Тейлора «»» return self.coefficients

Один из способов сделать вывод из статистического исследования — проверка гипотез. Это помогает нам проверить значения параметров популяции, которые угадываются на основе предварительно собранной информации. Многие области анализа данных включают в себя некоторое количество статистических испытаний, и почти всегда там используется проверка гипотез. Завтра в 16:00 в OTUS состоится открытый урок, на котором мы познакомимся с базовыми понятиями статистики и теории вероятностей, поймём, чем задачи этих областей отличаются друг от друга, концептуально рассмотрим методы проверки гипотез, и как они применяется в науке о данных на простых практических примерах. Регистрация для всех желающих — по ссылке.

2.5. Разложение функций в степенной ряд Тейлора

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

, (15)

если в этом интервале выполняется условие: где остаточный член формулы Тейлора, записанный в форме Лагранжа, где — положительное число меньше 1.

При ряд Тейлора называют рядом Маклорена: . (15)

Если в некотором интервале, содержащем точку , все производные ограничены некоторой константой, т.е. при любом n выполняется неравенство , где М – положительная постоянная, то . Тогда функция f(x) будет суммой ряда (15), причем только для тех значений х, при которых при (необходимое и достаточное условие равенства (15) в разложении f(x) в ряд Тейлора).

Приведем основные разложения в ряд Маклорена:

  1. Биномиальный ряд

Причем это последнее разложение при является

абсолютно сходящимся рядом в граничных точках интервала,

т.е. при х=-1 и при х=1; при ряд расходится при

х=-1 и условно сходится при при х=1; при ряд расходится на обеих границах интервала (-1;1).

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

Замечание. Если требуется разложить функцию в ряд Тейлора по степеням , то сначала делают замену переменной , находят разложение по степеням t и затем возвращаются к переменной х.

Пример. Разложить ln x в ряд по степеням (х-1).

Решение. Имеем , то (t=x-1), где

область сходимости есть полуинтервал .

Задание 19. Разложить функции f(x) в ряд Тейлора по

степеням х.

Задача 3.

Решение. Данную рациональную функцию сначала разложим на элементарные дроби:

Так как

Геометрические прогрессии, сходящиеся соответственно при и , то окончательно имеем разложение функции в ряд:

(16)

Областью сходимости которого является пересечение интервалов .

Ответ: Формула (16) справедлива при -1<x<1.

Задача 4.

Решение. Имеем

Пользуясь биномиальным рядом при :

Подставим в разложении:

где или — бифакториал нечетных, — бифакториал четных чисел. Последнее равенство умножим почленно на , получаем искомое разложение f(x) по степеням х: , с областью сходимости ряда .

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

,

если в этом интервале сходимости где- остаточный член формулы Тейлора, записанный в форме Лагранжа, где — положительное число меньше 1.

Практически степенные ряды для многих функций можно найти формально, используя основные разложения функций или формулу для суммы членов геометрической прогрессии. Итак, чтобы вычислить интеграл с точностью ε, где

функция f(x) разложена в степенной ряд, имеющий радиус сходимости R>b, надо:

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

2) Вычислить сумму полученного числового ряда с

заданной точностью (оценивая остаток ряда). Заметим, что при интегрировании степенного ряда его интервал сходимости не изменяется.

Задание 20. Вычислить интеграл с точностью

Задача 1.

Решение.

Разлагаем функцию в ряд Тейлора по степеням х ( , = ). Получаем ряд: сходящийся также на всей числовой прямой. Интегрируем ряд

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

при

и , то справедливо неравенство

(остаток ряда не превосходит

первого из отброшенных членов). Если , то тем более . Поэтому, оценив неравенство , находим количество членов ряда, необходимых для вычисления суммы с заданной точностью ε. Практически прикидывают, сколько надо взять членов ряда для заданной точности. Здесь достаточно взять первые два члена ряда, т.к. и, следовательно, . Вычисляем:

Ответ:

Задача 2.

Решение. Используем разложение

,

и заменяя в нем на , получаем ряд

,

сходящийся при всех . Интегрируем почленно полученный ряд

Так как , то оценивая это неравенство, получаем, что для вычисления интеграла с точностью достаточно взять два члена ряда, ибо . Вычисляем

Ответ:

1.

Серия Тейлор

М. Борн

Наша цель — найти многочлен, который дает нам хорошее приближение к некоторой функции. (Почему мы хотим это сделать, см. во введении.)

Мы находим желаемую полиномиальную аппроксимацию, используя ряд Тейлора .

Если мы хотим получить хорошее приближение к функции в области вблизи `x = a`, нам нужно найти первую, вторую, третью (и т. д.) производную функции и подставить значение a. 9номер

Условия

Чтобы найти такую ​​серию, должны быть выполнены некоторые условия:

  1. Функция `f(x)` должна быть бесконечно дифференцируемой (то есть мы можем найти каждую из первой производной, второй производной, третьей производной и так далее до бесконечности).
  2. Функция `f(x)` должна быть определена в области вблизи значения `x = a`.

Давайте посмотрим, что представляет собой ряд Тейлора на примере.

Пример — Расширение строки

х

Найдите разложение Тейлора для `f(x) = ln x` вблизи `x = 10`.

Ответить

Вспомните натуральный логарифм `ln x`. Вспомним также график y = ln x :

5101520123-1-2-3xf(x)Открыть изображение на новой странице

График `f(x)=ln(x)`.

Наша цель — найти хорошую полиномальную аппроксимацию кривой в районе x = 10,

Нам нужно использовать ряд Тейлора с a = 10,

94+ …`

Это и есть аппроксимирующий многочлен, который мы искали.

Из графика видно, что наш полином (серый цвет) является хорошим приближением для графика функции натурального логарифма (зеленый цвет) в области вблизи `x = 10`.

5101520123-1-2-3xf(x)Открыть изображение на новой странице

График аппроксимирующего полинома и `f(x)=ln(x)`.

Обратите внимание, что график становится не таким хорошим по мере удаления от `x = 10`. Области вблизи «x = 0» и «x = 20» демонстрируют некоторое расхождение.

Давайте еще немного уменьшим масштаб и посмотрим, что происходит с аппроксимацией:

5101520253035123-1-2-3xf(x)Открыть изображение на новой странице

График аппроксимирующего многочлена и `f(x)=ln(x) `, увеличено еще больше. {(n)}(z_0)}{n!},\quad n=0,1,2,\ldots \end{эквнаррай} То есть ряд (\ref{seriefunction}) сходится к $f(z)$, когда $z$ лежит в указанном открытом круге.

Каждый комплексный степенной ряд (\ref{seriefunction}) имеет радиус сходимости. Аналогично понятию интервала сходимости для вещественных степенной ряд, комплексный степенной ряд (\ref{seriefunction}) имеет круг сходимости, окружность с центром в точке $z_0$ наибольшего радиуса $R \gt 0$ для которого (\ref{seriefunction}) сходится в каждой точке окружности $|z−z_0|=R$. Степенной ряд сходится абсолютно во всех точках $z$ в пределах своей окружности сходимости, то есть для всех $z$, удовлетворяющих $|z − z_0| \lt R$ и расходится во всех точках $z$, внешних по отношению к окружности, то есть для всех $z$, удовлетворяющих $|z−z_0| \gt р$. Радиус сходимости может быть:

  1. $R = 0$ (в этом случае (\ref{seriefunction}) сходится только в своем центре $z = z_0$),
  2. $R$ конечное положительное число (в этом случае (\ref{seriefunction}) сходится во всех внутренних точки окружности $|z − z_0| = R)$, или
  3. $R = \infty$ (в этом случае (\ref{seriefunction}) сходится для всех $z$).

Радиус сходимости можно рассчитать с помощью критерия отношения сходимости. Например, если:

  1. $\displaystyle \lim_{n\rightarrow \infty} \left| \frac{a_{n+1}}{a_n}\right| = L\neq 0$, радиус сходимость $R=\dfrac{1}{L}$;
  2. $\displaystyle \lim_{n\стрелка вправо \infty} \left| \frac{a_{n+1}}{a_n}\right|= 0$, радиус сходимости равен $R=\infty$;
  3. $\displaystyle \lim_{n\стрелка вправо \infty} \left| \frac{a_{n+1}}{a_n}\right|= \infty$, радиус сходимости равен $R=0$.

Динамическое исследование

Используйте следующий апплет для изучения представлений рядов Тейлора. и его радиус сходимости, который зависит от значения $z_0$.

В левой части апплета внизу фазовый портрет комплекса отображается функция. С правой стороны вы можете увидеть приближение функции через полиномы Тейлора в синей базовой точке $z_0$. Комплексная функция, базовая точка $z_0$, порядок многочлена (вертикальный ползунок) и масштабирование (горизонтальный ползунок) можно изменить.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *