Разное

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

математика — Разложение в ряд Тейлора функции(Python). Приближённое значение функции

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

import math
from math import factorial
a=3.0
b=4.0
lich = 0
krok=(b-a)/10
lich=0
def f(x):
    return 1/(1+((math.e)**(1+x)))
def f_tochne(x, n):
    result=0
    for i in range(n):
        result += ((factorial(n))/((1+x)**n))
    return result
   
    
while a<=b:    
    print(round(a,2), end=' ')
    print(round(f(a),5),end=' ')
    print(round(f_tochne(a,lich),5))
    lich+=1
    a+=krok[![введите сюда описание изображения][1]][1]

  • python
  • математика
  • ряды

1

Можно и без всяких импортов математики и факториалов…

def f(x):
    return 2.718281828459045**(1+x)
def tailor(x, eps):
    x = 1+x
    sum = 1+x
    term = x;
    n = 2;
    while term*term > eps*eps:
        term *= x/n
        n += 1
        sum += term
    return sum
a=3.
0 b=4.0 krok=(b-a)/10 while a<=b: print(round(a,2), end=' ') print(round(f(a),5),end=' ') print(round(tailor(a,1e-6),5)) a+=krok

Как там таблицу выводить красиво — это я не очень знаю, Python — не мое, смотрите сами. Но вот так считать, не по количеству членов, а по заданной точности — оно как-то надежнее 🙂 Кстати, пятью членами в этом диапазоне значений никак не отделаться — нужно штук 20…

3

from math import factorial
def taylor(x, n):
    return sum((1+x) ** i / factorial(i) for i in range(n + 1))

2

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Разложение в ряд Тейлора функции 1/(1+z^2).

?

Previous Entry | Next Entry

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

Любая аналитическая функция f(z) может быть представима в виде ряда Тейлора в некоторой окрестности точки . Решать будем двумя способами, различие в методе определения коэффициентов Cn.

Разложение в точке .

Первый способ.

Воспользуемся известной формулой представления гармонического ряда: .

Тем самым

Радиус сходимости ряда равен единице, так как любая область содержащая окружность радиуса большего единицы будет включать особые точки z=+/-i, в которых функция не является аналитической. Также радиус сходимости можно вычислить по коэффициентам Cn например как верхний предел

Второй способ.

Вычислим коэффициенты C_n ряда функции 1/(1+z^2) в точке z=0 строго по определению.

Легко убедиться в справедливости формулы: . Следовательно . Интеграл по замкнутому контуру при n=1 согласно интегральной теореме Коши равен значению функции f(z)=1 в точке z=0, то есть равен 1, при n>1 интеграл равен нулю, так как (n-1)-ая производная от константы есть ноль . Интеграл по замкнутому контуру при n=1,2 равен нулю, так как подынтегральная функция является аналитической в любой области, ограничивающей точку z=0 и содержащейся в открытом круге с радиусом меньшим единица. При n>2 этот интеграл равен . Таким образом для m≥2 справедливо рекуррентное соотношение . Так как , то .

Разложение в точке .


Первый способ.




Радиус сходимости рядов равен √2, так как любая область содержащая окружность большего радиуса будет включать особые точки z=+/-i, в которых функция не является аналитической. Также радиус сходимости можно вычислить по коэффициентам Cn.

Второй способ.

Легко убедиться в справедливости формулы: .
. Интеграл по замкнутому контуру при n=1 равен значению функции f(z)=1 в точке z=1, то есть 1. При n>1 интеграл равен нулю, так как (n-1)-ая производная от константы есть ноль. Интеграл по замкнутому контуру при n=1 равен нулю, так как подынтегральная функция является аналитической в любой области, ограничивающей точку z=1 и содержащейся в открытом круге с радиусом меньшим √2 для случая когда w=+/-i, при n>1 этот интеграл равен . Таким образом для m ≥1 справедливо рекуррентное соотношение . Так как , то .

Заключительная часть.



Дополнительные ссылки:
Теорема Тейлора.
Пример на www.wikipedia.org.
Лекция с разбором задачи:

February 2020
SMTWTFS
      1
2345678
9101112131415
16171819202122
23242526272829

Powered by LiveJournal. 4` `+…`

`f'(0)` — первая производная, оцененная при `x = 0`, `f’’(0)` — вторая производная, оцененная при `x = 0`, и так далее.

[ Примечание: Некоторые учебники называют серию на этой странице «Серией Тейлора» (которой они тоже являются), или «расширением серии», или «степенной серией».]

Пример 1: Расширение sin

x

Найдите разложение в ряд Маклорена для `f(x) = sin x`.

Ответить

Нам нужно найти первую, вторую, третью и т. д. производные и вычислить их в x = 0. Начиная с:

f ( х ) = грех х

f (0) = 0

Первая производная:

f ‘( х ) = cos х

f ‘(0) = cos 0 = 1

Вторая производная:

f »( x ) = −sin x

f »(0) = −sin 0 = 0

Третья производная:

f »'( x ) = −cos x

f »'(0) = −cos 0 = −1

Четвертая производная:

f iv ( x ) = sin x

f iv (0) = sin 0 = 0

Мы видим, что эта модель будет продолжаться вечно.

Теперь подставим значения этих производных в ряд Маклорена: 97+…`

, чтобы увидеть, является ли полином хорошим приближением к `f(x) = sin x`.

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

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

Мы видим, что наш многочлен (серый цвет) является хорошим приближением к `f(x) = sin x` (зеленый цвет) вблизи `x = 0`. На самом деле, между -π ≤ x ≤ π все очень хорошо.

Не пропустите интерактивный апплет серии Тейлора и Маклорена, где вы сможете подробнее изучить эту концепцию и другие примеры на этой странице. 9x` в районе `-2

Упражнение

Найдите расширение серии Маклорена для `cos x`.

Ответить

f ( х ) = cos х

ф (0) = 1

Первая производная:

f ‘( х ) = −sin х

f ‘(0) = −sin 0 = 0

Вторая производная:

f »( x ) = −cos х

f »(0) = −cos 0 =

1

Третья производная:

f »'( x ) = sin x

f »'(0) = sin 0 = 0

Четвертая производная:

f iv ( x ) = cos x

f iv (0) = cos 0 = 1

При подстановке этих значений в формулу разложения получаем: 98-. ..`

Вот график, показывающий ответ, который мы только что получили, и исходный график `f(x) = cos(x)`:

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

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

Еще раз отметим, что наш многочлен (серый цвет) является хорошим приближением к `f(x) = cos x` (зеленым цветом) между -π ≤ x ≤ π.

Поиск пи с помощью бесконечной серии

Пример 3

В 17 веке Лейбниц использовал расширение ряда арктана 9.7/7+…`

Учитывая, что (см. треугольник 45-45)

`arctan 1=pi/4`

мы можем подставить `x = 1` в приведенное выше выражение и получить следующее расширение для π

`пи=4(1-1/3+1/5-1/7+…)`

Все очень хорошо, но это был плохой способ найти значение π, потому что это разложение сходится очень медленно.

Даже после добавления 1000 терминов у нас нет точности до 3 знаков после запятой.

9n)/(2n+1)=3,142\ 591\ 654…`

(Мы не знаем, что π = 3,141 592 653 5…, но знаем много других более эффективных способов найти число «пи».)

Вот график y = arctan x (зеленый) по сравнению с только что найденным полиномом (серый).

24-2-40.5π-0.5πxf(x)Открыть изображение на новой странице

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

Пример 4

Давайте теперь найдем значение `pi`, используя то же расширение, но на этот раз мы подставим `x=1/sqrt(3)`. Мы будем использовать факт `tan (pi/6) = 1/sqrt(3)`. 9(2n+1)/(2n+1)` `=6 xx 0,523\ 598\ 775\ 61` `=3,141\ 592\ 653\ 6…`

Почему здесь гораздо точнее?

Аппроксимирующая кривая в этом случае имеет так называемый радиус сходимости (ограниченная область), где она «работает» (то есть сходится). Вне этой области аппроксимация расходится.

Мы увидим еще один пример этой ситуации в интерактивном апплете серии Тейлора и Маклорена.

Расширения серии

— документация по SymPy 1.11

Ограничения

Основной целью этого модуля является расчет лимитов.

sympy.series.limits.limit( e
, z , z0 , dir=’+’ )[источник]

Вычисляет предел e(z) в точке z0 .

Параметры:

e : выражение, предел которого должен быть взят

с : символ, представляющий переменную в пределе.

Другие символы рассматриваются как константы. Многомерные ограничения не поддерживаются.

z0 : значение, к которому стремится z . Может быть любым выражением,

включая оо и оо .

dir : строка, необязательная (по умолчанию: «+»)

Ограничение двунаправленное, если dir="+-" , справа (z->z0+), если dir="+" , и слева (z->z0-), если директор="-" .

Для бесконечного z0 ( oo или -oo ) каталог аргумент определяется из направления бесконечности (т. е. dir="-" вместо oo ).

Примеры

 >>> из лимита импорта sympy, sin, oo
>>> из sympy.abc импортировать x
>>> предел(грех(х)/х, х, 0)
1
>>> limit(1/x, x, 0) # по умолчанию dir='+'
оо
>>> лимит(1/х, х, 0, дир = "-")
-оо
>>> limit(1/x, x, 0, dir='+-')
зоопарк
>>> предел(1/х, х, оо)
0
 

Примечания

Сначала мы попробуем некоторые эвристики для простых и частых случаев, таких как «x», «1/x», «x**2» и подобные, чтобы было быстро. Во всех остальных случаях мы используем Алгоритм Грунца (см. функцию gruntz()).

См. также

limit_seq

возвращает предел последовательности.

класс sympy.series.limits.Limit( e , z , z0 , dir=’+’ )[источник]

Представляет неоцененный предел.

Примеры

 >>> from sympy import Limit, sin
>>> из sympy.abc импортировать x
>>> Предел (sin(x)/x, x, 0)
Предел (грех (х) / х, х, 0)
>>> Ограничение(1/x, x, 0, dir="-")
Предел (1/x, x, 0, dir='-')
 
doit( **подсказки )[источник]

Оценивает предел.

Параметры:

глубокий : bool, необязательный (по умолчанию: True)

Вызвать метод doit выражений, задействованных ранее принимая лимит.

подсказки : необязательные аргументы ключевого слова

Для передачи в методы doit ; используется только в том случае, если значение deep равно True.

Как объяснялось выше, рабочая лошадка для предельных вычислений — это функция gruntz(), которая реализует алгоритм Грунца для вычисления пределов.

Алгоритм Грунца

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

Сначала определим порядок функций. Предположим, что \(f(x)\) и \(g(x)\) — два вещественнозначные функции такие, что \(\lim_{x \to \infty} f(x) = \infty\) и аналогично \(\lim_{x \to \infty} g(x) = \infty\). Будем говорить, что \(f(x)\) 90 = \lim_{x \to \infty} g\).

Использование этих результатов дает следующую стратегию вычисления \(\lim_{x \to \infty} f(x)\):

  1. Найдите набор из наиболее быстро меняющихся подвыражений (множество MRV) выражения \(f(x)\). То есть из множества всех подвыражений \(f(x)\) найдите элементы, которые максимальны по отношению \(\succ\).

  2. Выберите функцию \(\omega\), которая находится в том же классе сопоставимости, что и элементы в наборе MRV, такие, что \(\lim_{x \to \infty} \omega = 0\).

  3. Разложите \(f(x)\) как ряд в \(\omega\) таким образом, чтобы антецеденты приведенная выше теорема выполняется.

  4. Примените теорему и завершите вычисление \(\lim_{x \to \infty} f(x)\), возможно, путем рекурсивной обработки \(g_1(x)\).

Примечания

В этой экспозиции затушевываются некоторые детали. Многие описаны в файле gruntz.py, и все это можно найти в очень читаемой диссертации Грунца. Большинство важные моменты, которые не были объяснены:

  1. Учитывая f(x) и g(x), как определить, если \(f(x) \succ g(x)\), \(g(x) \succ f(x)\) или \(g(x) \asymp f(x)\)?

  2. Как найти набор MRV выражения?

  3. Как рассчитать расширение ряда?

  4. Почему алгоритм завершает работу?

Если вам интересно, обязательно взгляните на Тезис Грунца.

Артикул
sympy.series.gruntz.gruntz( e , z , z0 , dir=’+’ )[источник]

Вычислите предел e(z) в точке z0, используя алгоритм Грюнца.

Пояснение

z0 может быть любым выражением, включая oo и -oo.

Для dir="+" (по умолчанию) рассчитывает лимит справа (z->z0+) и для dir="-" предел слева (z->z0-). Для бесконечного z0 (oo или -oo), аргумент dir не имеет значения.

Этот алгоритм полностью описан в строке документации модуля в файле gruntz.py. файл. Он сильно зависит от расширения серии. Чаще всего gruntz() используется только в случае сбоя более быстрой функции limit() (которая использует эвристику).

sympy.series.gruntz.compare( a , b , x ) [источник]

Возвращает «<», если a» для a>b

sympy.series.gruntz.rewrite( e , Omega , x , wsym )[источник]

e(x) … функция Омега … набор mrv wsym … символ, который будет использоваться для w

Возвращает переписанное значение e в терминах w и log(w). См. test_rewrite1() для примеров и правильных результатов.

sympy.series.gruntz.build_expression_tree( Omega , перезаписывает )[источник]

Вспомогательная функция для перезаписи.

Нам нужно отсортировать Omega (набор mrv), чтобы мы заменили выражение перед заменяем любое выражение, в терминах которого оно должно быть переписано:

 е1 ---> е2 ---> е3
         \
          -> е4
 

Здесь мы можем сделать e1, e2, e3, e4 или e1, e2, e4, e3. Для этого мы собираем узлы в дерево и сортируем их по высоте.

Эта функция строит дерево, перезаписывает и сортирует узлы.

sympy.series.gruntz.mrv_leadterm( e , x )[источник]

Возвращает (c0, e0) для e.

sympy.series.gruntz.calculate_series( e , x , logx=Нет )[источник]

Вычисляет по крайней мере один член ряда e в x .

Это место чаще всего выходит из строя, так что оно выполняет свою функцию.

sympy.series.gruntz.limitinf( e , x , leadimp=False )[источник]

Предел e(x) для x->oo.

Пояснение

Если LeadSimp имеет значение True, делается попытка упростить интерлиньяж. срок расширения серии e . Это может преуспеть, даже если и не могут быть упрощены.

sympy.series.gruntz.sign( e , x )[источник]

Возвращает знак выражения e(x) для x->oo.

 e > 0 при достаточно большом x ... 1
e == 0 для достаточно больших x ... 0
e < 0 для достаточно больших x ... -1
 

Результат этой функции в настоящее время не определен, если e меняет знак сколь угодно часто для сколь угодно большого x (например, sin(x)).

Обратите внимание, что это возвращает ноль, только если e равно постоянно ноль при достаточно большом x. [Если e постоянно, конечно, это всего лишь то же, что и знак е.]

sympy.series.gruntz.mrv( e , x )[источник]

Возвращает SubsSet наиболее быстро меняющихся (mrv) подвыражений «e», и е переписано с точки зрения этих

sympy.series.gruntz.mrv_max1( f , g , exps , x )[источник]

Вычисляет максимум двух наборов выражений f и g, которые относятся к одному и тому же классу сопоставимости, т. е. mrv_max1() сравнивает (два элемента) f и g и возвращает набор, который находится в более высоком классе сопоставимости объединения обоих, если они имеют один и тот же порядок изменения. Также возвращает опыты с соответствующими заменами.

sympy.series.gruntz.mrv_max3( f , expsf , g , expsg , union , expsboth , x )[источник]

Вычисляет максимум двух наборов выражений f и g, которые находятся в одном классе сопоставимости, т. е. max() сравнивает (два элемента) f и g и возвращает либо (f, expsf) [если f больше], (g, expsg) [если g больше] или (union, expsboth) [если f, g одного класса].

класс sympy.series.gruntz.SubsSet[источник]

Сохраняет (выражения, фиктивные) пары и как переписать выражения.

Пояснение

Алгоритму Грунца необходимо переписать некоторые выражения в терминах нового переменная ж. Мы не можем использовать сабы, потому что это слишком умно для нас. Для пример:

 > Omega=[exp(exp(_p - exp(-_p))/(1 - 1/_p)), exp(exp(_p))]
> O2=[exp(-exp(_p) + exp(-exp(-_p))*exp(_p)/(1 - 1/_p))/_w, 1/_w]
> e = exp(exp(_p - exp(-_p))/(1 - 1/_p)) - exp(exp(_p))
> e.subs(Omega[0],O2[0]).subs(Omega[1],O2[1])
-1/w + exp(exp(p)*exp(-exp(-p))/(1 - 1/p))
 

действительно не то, что нам нужно!

Поэтому мы делаем это сложным путем и отслеживаем все, что мы потенциально можем хотите заменить фиктивными переменными. Рассмотрим выражение:

 ехр(х - ехр(-х)) + ехр(х) + х.
 

Набор mrv: {exp(x), exp(-x), exp(x - exp(-x))}. Введем соответствующие фиктивные переменные d1, d2, d3 и перепишем:

 d3 + d1 + х.
 

Этот класс в первую очередь отслеживает отображение expr->variable, т.е. будет на данном этапе словарь:

 {exp(x): d1, exp(-x): d2, exp(x - exp(-x)): d3}.
 

[Так удобнее оказывается.] Но иногда выражения в наборе mrv имеют другие выражения из mrv устанавливается как подвыражение, и нам также нужно отслеживать это. В в этом случае d3 действительно равно exp(x - d2), поэтому на данном этапе переписывается:

 {d3: ехр(x-d2)}.
 

Функция rewrite использует всю эту информацию для правильной перезаписи нашего выражение через w. В этом случае w можно выбрать равным exp(-x), то есть д2. Тогда правильная запись:

 exp(-w)/w + 1/w + x.
 
копировать () [источник]

Создать мелкую копию SubsSet

do_subs( e )[источник]

Замените переменные выражениями

встречается ( s2 ) [источник]

Сообщить, имеют ли self и s2 непустое пересечение

союз( s2 , exps=Нет )[источник]

Вычислить объединение self и s2, корректируя exps

Более интуитивное расширение серии

Это достигается создав оболочку вокруг Basic. series(). Это позволяет использовать series(x*cos(x),x), что, возможно, более интуитивно понятно, чем (x*cos(x)).series(x).

Примеры

 >>> из sympy import Symbol, cos, series
>>> х = Символ('х')
>>> ряд(cos(x),x)
1 - х**2/2 + х**4/24 + О(х**6)
 

Артикул

sympy.series.series.series( expr , x=None , x0=0 , n=6 , dir='+' )[источник]

Разложение выражения в ряд вокруг точки \(x = x0\).

Параметры:

выражение : Выражение

Выражение, ряд которого необходимо расширить.

x : Символ

Это вычисляемая переменная выражения.

x0 : Значение

Значение, вокруг которого рассчитывается x . Может быть любым значением с -оо по оо .

n : Значение

Количество терминов, до которых должен быть расширен ряд.

dir : Строка, необязательно

Расширение серии может быть двунаправленным. Если dir="+" , тогда (х->х0+). Если dir="-", то (x->x0-). Для бесконечности ``x0 ( oo или -oo ), определяется аргумент dir от направления бесконечности (т.е. dir="-" для или ).

Возвраты:

Выражение

Расширение ряда выражения о x0

Примеры

 >>> из импортной серии sympy, загар, оо
>>> из sympy.abc импортировать x
>>> f = тангенс(х)
>>> серия(ж, х, 2, 6, "+")
tan(2) + (1 + tan(2)**2)*(x - 2) + (x - 2)**2*(tan(2)**3 + tan(2)) +
(x - 2)**3*(1/3 + 4*tan(2)**2/3 + tan(2)**4) + (x - 2)**4*(tan(2)* *5 +
5*загар(2)**3/3 + 2*загар(2)/3) + (x - 2)**5*(2/15 + 17*загар(2)**2/15 +
2*тангенс(2)**4 + тангенс(2)**6) + О((х - 2)**6, (х, 2))
 
 >>> ряд(ф, х, 2, 3, "-")
tan(2) + (2 - x)*(-tan(2)**2 - 1) + (2 - x)**2*(tan(2)**3 + tan(2))
+ О((х - 2)**3, (х, 2))
 
 >>> ряд(ф, х, 2, оо, "+")
Traceback (последний последний вызов):
. ..
TypeError: объект «Бесконечность» не может быть интерпретирован как целое число
 

См. также

sympy.core.expr.Expr.series

Полную информацию об этой оболочке см. в строке документации Expr.series().

Условия заказа

Этот модуль также реализует автоматическое отслеживание порядка ваших расширение.

Примеры

 >>> из sympy import Symbol, Order
>>> х = Символ('х')
>>> Порядок(х) + х**2
О (х)
>>> Заказ(х) + 1
1 + О(х)
 

Артикул

класс sympy.series.order.Order( expr , *args , **kwargs )[источник]

Представляет ограничивающее поведение некоторой функции.

Пояснение

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

Формальное определение порядка функции \(g(x)\) относительно точки \(a\) такова, что \(g(x) = O(f(x))\) as \(x \rightarrow a\) тогда и только тогда, когда для любого \(\delta > 0\) существует \(M > 0\) такое, что \(|g(x)| \leq M|f(x)|\) для \(|x-a| < \delta\). Это эквивалентно \(\lim_{x \rightarrow a} \sup |г(х)/е(х)| <\infty\). 92\), \(х\) и константы.

Примеры

 >>> from sympy import O, oo, cos, pi
>>> из sympy.abc импортировать x, y
 
 >>> О(х + х**2)
О (х)
>>> О(х + х**2, (х, 0))
О (х)
>>> О(х + х**2, (х, оо))
О(х**2, (х, оо))
 
 >>> О(1 + х*у)
О (1, х, у)
>>> О(1 + х*у, (х, 0), (у, 0))
О (1, х, у)
>>> О(1 + х*у, (х, оо), (у, оо))
О (х * у, (х, оо), (у, оо))
 
 >>> О(1) в О(1, х)
Истинный
>>> O(1, x) в O(1)
ЛОЖЬ
>>> О(х) в О(1, х)
Истинный
>>> О(х**2) в О(х)
Истинный
 
 >>> О(х)*х
О(х**2)
>>> О(х) - О(х)
О (х)
>>> О(cos(x))
О(1)
>>> O(cos(x), (x, пи/2))
О(х - пи/2, (х, пи/2))
 

Примечания

В O(f(x), x) предполагается, что выражение f(x) имеет ведущее срок. O(f(x), x) автоматически преобразуется в O(f(x).as_leading_term(x),x) .

O(выражение*f(x), x) есть O(f(x), x)

O(выражение, x) есть O(1)

O(0, х) равно 0.

Многомерный O также поддерживается:

O(f(x, y), x, y) преобразуется в O(f(x, y).as_leading_term(x,y).as_leading_term(y), x, y)

В многомерном случае предполагается, что пределы w.r.t. различные символы коммутируют.

Если символы не переданы, используются все символы в выражении а предельная точка считается равной нулю.

Ссылки

[R742] (1,2)

Буква O

содержит( выражение )[источник]

Вернуть True, если expr принадлежит Order(self.expr, *self.variables). Вернуть False, если self принадлежит expr. Возвратите None, если отношение включения не может быть определено (например, когда self и expr имеют разные символы).

Серийное ускорение

ТОДО

Артикул

sympy.series.acceleration.richardson( A , k , n , N )[источник]

Рассчитать приближение для lim k->oo A(k) с помощью Ричардсона экстраполяция с членами A(n), A(n+1), …, A(n+N+1). Выбор N ~= 2*n часто дает хорошие результаты.

Примеры

Простым примером является вычисление exp(1) с использованием определения предела. Этот предел сходится медленно; n = 100 дает только два точных цифры:

 >>> из sympy.abc импортировать n
>>> е = (1 + 1/n)**n
>>> print(round(e.subs(n, 100).evalf(), 10))
2.7048138294
 

Экстраполяция Ричардсона с 11 правильно выбранными терминами дает значение, соответствующее указанной точности:

 >>> из sympy import E
>>> из sympy. series.acceleration импортирует Ричардсона
>>> print(round(Richardson(e, n, 10, 20).evalf(), 10))
2,7182818285
>>> print(round(E.evalf(), 10))
2,7182818285
 

Еще одно полезное приложение для ускорения сходимости рядов. Вычисление 100 членов ряда zeta(2) 1/k**2 дает только две точные цифры:

 >>> из sympy.abc импортировать k, n
>>> из sympy import Sum
>>> A = Сумма (k**-2, (k, 1, n))
>>> print(round(A.subs(n, 100).evalf(), 10))
1.6349839002
 

Экстраполяция Ричардсона работает намного лучше:

 >>> из sympy import pi
>>> print(round(Richardson(A, n, 10, 20).evalf(), 10))
1,6449340668
>>> print(round(((pi**2)/6).evalf(), 10)) # Точное значение
1.6449340668
 
sympy.series.acceleration.shanks( A , k , n , m=1 )[источник]

Вычислите аппроксимацию для lim k->oo A(k), используя n-член хвостовиков преобразование S(A)(n). При m > 1 вычислить m-кратную рекурсивную Преобразование Шэнкса S(S(…S(A)…))(n).

Преобразование Шенкса полезно для суммирования рядов Тейлора, которые медленно сходятся около полюса или сингулярности, т.е. для журнала (2):

 >>> из sympy.abc импортировать k, n
>>> из sympy import Sum, Integer
>>> из sympy.series.acceleration импортировать хвостовики
>>> A = Сумма (Целое число (-1) ** (k + 1) / k, (k, 1, n))
>>> print(round(A.subs(n, 100).doit().evalf(), 10))
0,6881721793
>>> печать (раунд (хвостовики (A, n, 25).evalf(), 10))
0,6931396564
>>> печать (раунд (хвостовики (A, n, 25, 5).evalf(), 10))
0,6931471806
 

Правильное значение 0,6931471805599453094172321215.

Остатки

ТОДО

Артикул

sympy.series.residues.residue( expr , x , x0 ) [источник]

Находит остаток выражения в точке x=x0.

Остаток определяется как коэффициент 1/(x-x0) в степенном ряду расширение около x=x0 .

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

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