series

Вычислите обобщенное последовательное расширение

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

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

Синтаксис

series(f, x, <order>, <Left | Right | Real | Undirected>, <NoWarning>, <UseGseries>)
series(f, x = x0, <order>, <Left | Right | Real | Undirected>, <options>)

Описание

series(f, x = x0) вычисляет первые сроки последовательного расширения f относительно переменной x вокруг точки x0.

series пытается вычислить или Ряд Тейлора, Ряд Лорана, ряд Пюизе или обобщенное последовательное расширение f вокруг x = x0. Смотрите Series::gseries для получения дополнительной информации об обобщенных последовательных расширениях.

Математический тип ряда, возвращенного series, может быть запрошен с помощью выражения типа Type::Series.

Если series не может вычислить последовательное расширение f, символьный вызов функции возвращен. Это - выражение типа "series". Cf. Пример 11.

Математически, расширение, вычисленное series, допустимо в некотором окружении точки расширения в комплексной плоскости. Обычно, это - открытый диск, сосредоточенный в x0. Однако, если точка расширения является точкой разветвления, то возвращенное расширение не может аппроксимировать функциональный f для значений x близко к разрезу. Cf. Пример 12.

Используя опции Left или Right, можно вычислить направленные расширения, которые допустимы вдоль вещественной оси. С опцией Real вычисляется двухстороннее расширение вдоль вещественной оси. Смотрите Пример 5 и Пример 6.

Если x0 является infinity или -infinity, то направленное последовательное расширение вдоль вещественной оси слева к положительной действительной бесконечности или справа к отрицательной действительной бесконечности, соответственно, вычисляется. Если x0 является complexInfinity, и dir не задан или Undirected, то неориентированное последовательное расширение вокруг комплексной бесконечности, т.е. Северный полюс Римановой сферы, вычисляется. Определение x0= infinity эквивалентно x0= complexInfinity и dir = Left. Точно так же x0= -infinity эквивалентен x0= complexInfinity и dir = Right. Cf. Пример 7.

Такое последовательное расширение вычисляется можно следующим образом: серийная переменная x в f заменяется (или для x0= -infinity). Затем последовательное расширение f вокруг u = 0 вычисляется. Наконец, (или, соответственно) заменен в результате.

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

Количество требуемых условий для расширения является аргументом order, если задано. В противном случае значение переменной окружения ORDER используется. Можно изменить значение по умолчанию 6 путем присвоения нового значения ORDER.

Количество условий считается от самого низкого термина степени на для конечных точек расширения, и от самого высокого термина степени на для расширений вокруг бесконечности, т.е. “order” должен рассматриваться как “относительный порядок усечения”.

series реализует ограниченную сумму управления точностью, чтобы обойти отмену. Если количество условий вычисленного расширения является меньше, чем order, второе последовательное вычисление с более высоким значением order пробуют автоматически, и результат последнего возвращен.

Примечание

Тем не менее, фактическое количество условий в получившемся последовательном расширении может отличаться от требуемого количества условий. Смотрите Пример 13 и Пример 15.

Расширения Taylor/Laurent/Puiseux (весь доменный тип Series::Puiseux) могут быть ограничены легко термином абсолютной команды путем добавления соответствующего термина O. Cf. Пример 14.

Расширения символьных интегралов могут быть вычислены. Cf. Пример 16.

Если f является выражением типа RootOf, то series возвращает набор всех ненулевых серийных решений соответствующего алгебраического уравнения. Cf. Пример 9.

Если order имеет значение infinity, то система пытается преобразовать первый аргумент в формальный бесконечный ряд, т.е. это вычисляет общую формулу для n-th коэффициент в Разложении Тейлора f. Результатом является неактивная символьная сумма или многочленное выражение. Cf. Пример 10.

Если series возвращает последовательное расширение доменного типа Series::Puiseux, это может произойти, что “коэффициенты” возвращенного ряда зависят от серийной переменной. В этом случае расширение не является соответствующим рядом Пюизе в математическом смысле. Смотрите Пример 7 и Пример 8. Однако, если серийной переменной является x, и точкой расширения является x 0, то следующее допустимо для каждой коэффициентной функции c (x) и каждый положительный ε: c (x)   (x - x 0) ε сходится, чтобы обнулить и неограничен, когда x приближается к x 0. Точно так же, если точкой расширения является infinity, то, для каждого положительного ε, сходится, чтобы обнулить и c (x),  xε неограничен, когда x приближается к infinity.

Функция возвращает объект области, которым могут управлять стандартные арифметические операции. Кроме того, следующие методы доступны: ldegree возвращает экспоненту ведущего термина; Series::Puiseux::order возвращает экспоненту остаточного члена; expr преобразовывает в арифметическое выражение, удаляя остаточный член; coeff(s, n) возвращает коэффициент термина s с экспонентой n; lcoeff возвращает ведущий коэффициент; revert вычисляет инверсию относительно состава; diff и int дифференцируют и интегрируют последовательное расширение, соответственно; map применяет функцию ко всем коэффициентам. Смотрите страницы справки для Series::Puiseux и Series::gseries для получения дальнейшей информации.

Примечание

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

Взаимодействия среды

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

Примеры

Пример 1

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

s := series(sin(x), x)

Синтаксически, результатом является объект доменного типа Series::Puiseux:

domtype(s)

Математический тип последовательного расширения может быть запрошен с помощью выражения типа Type::Series:

testtype(s, Type::Series(Taylor))

Различные системные функции перегружаются, чтобы работать с серийными объектами. Например, функциональный coeff может использоваться, чтобы извлечь коэффициенты последовательного расширения:

coeff(s, 5)

Стандартные арифметические операторы могут использоваться, чтобы добавить или умножить последовательные расширения:

s + 2*s, s*s

delete s:

Пример 2

Этот пример вычисляет состав s отдельно, т.е. последовательное расширение sin (sin (x)).

s := series(sin(x), x): s @ s = series(sin(sin(x)), x)

delete s:

Пример 3

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

series(sin(x), x) / series(cos(x), x) = series(tan(x), x)

bool(%)

Пример 4

Мы вычисляем расширение Лорана вокруг точки 1:

s := series(1/(x^2 - 1), x = 1)

testtype(s, Type::Series(Taylor)),
testtype(s, Type::Series(Laurent))

Пример 5

Без дополнительного аргумента или с опцией Undirected, не расширена функция sign:

series(x*sign(x^2 + x), x) =
series(x*sign(x^2 + x), x, Undirected)

Некоторое упрощение происходит, если вы запрашиваете расширение, которое допустимо вдоль вещественной оси только:

series(x*sign(x^2 + x), x, Real)

sign исчезает от результата, если вы запрашиваете одностороннее расширение вдоль вещественной оси:

series(x*sign(x^2 + x), x, Right),
series(x*sign(x^2 + x), x, Left)

Пример 6

В MuPAD® функция heaviside задана только на вещественной оси. Таким образом неориентированное расширение в комплексной плоскости не целесообразно:

series(x*heaviside(x + 1), x)
Warning: Unable to find an undirected series expansion. Try the 'Left', 'Right', or 'Real' option. [Series::main]

После определения соответствующих опций система вычисляет расширение вдоль вещественной оси:

series(x*heaviside(x + 1), x, Real),
series(x*heaviside(x + 1), x, Right)

В точке I в комплексной плоскости не задан функциональный heaviside, и ни один не последовательное расширение:

series(heaviside(x), x = I, Real)

Пример 7

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

s1 := series((x + 1)/(x - 1), x = complexInfinity)

s2 := series(psi(x), x = infinity)

domtype(s1), domtype(s2)

Несмотря на то, что оба расширения имеют доменный тип Series::Puiseux, s2 не является рядом Пюизе в математическом смысле, поскольку первый срок содержит логарифм, который имеет существенную особенность в бесконечности:

testtype(s1, Type::Series(Puiseux)),
testtype(s2, Type::Series(Puiseux))

coeff(s2)

Следующее расширение имеет доменный тип Series::gseries:

s3 := series(exp(x)/(1 - x), x = infinity, 4)

domtype(s3)

delete s1, s2, s3:

Пример 8

Колебание, но ограниченные функции может появиться в “коэффициентах” последовательного расширения также:

s := series(sin(x + 1/x), x = infinity)

domtype(s), testtype(s, Type::Series(Puiseux))

coeff(s, -1)

Пример 9

Алгебраическое уравнение y 5 - y - x = 0 не может быть разрешено с точки зрения радикалов:

solve(y^5 - y - x, y)

Однако series может вычислить все серийные решения этого уравнения вокруг x = 0:

series(%, x = 0)

Это может произойти, что сами серийные решения выражаются с точки зрения RootOf s:

series(RootOf(y^5 -(x + 2*x^2)*y^3 - x^3*y^2
              + (x^3 + x^4)*y + x^4 + x^5, y), x)

Коэффициентам алгебраического уравнения позволяют быть трансцендентальными. Они внутренне преобразованы в ряд Пюизе series:

series(RootOf(y^3 - y - exp(x - 1) + 1, y), x = 1, 4)

Ошибка происходит, если некоторый коэффициент не может быть расширен в ряд Пюизе:

series(RootOf(y^3 - y - exp(x), y), x = infinity)
Error: Unable to expand coefficients of 'RootOf(y^3 - y - exp(1/x), y)' into a series. [Series::algebraic]

Пример 10

В этом примере мы вычисляем формулу для n-th коэффициент a n в Разложении Тейлора функции вокруг нуля путем определения infinity как order. Результатом является символьная сумма:

series(exp(-x), x, infinity)

Если вход является многочленным выражением, то так вывод:

series(x^5 - 1, x = 1, infinity)

Пример 11

Никакое асимптотическое расширение не существует для функции Бесселя Дж незаданного индекса, и series возвращает символьный вызов функции:

series(besselJ(k, x), x=infinity)

domtype(%), type(%)

Пример 12

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

series(ln(x), x = -1, 3)

series(sqrt(x), x = -1, 3)

Ситуация более сложна, когда точка расширения является точкой разветвления. Следующее расширение функционального arcsin(x + 1) допустимо в открытом диске вокруг точки разветвления 0:

series(arcsin(x + 1), x, 4)

Однако расширение f = ln(x + I*x^3) вокруг точки разветвления 0, который возвращен series, не аппроксимирует f для значений x, которые являются близко к отрицательной вещественной оси:

f := ln(x + I*x^3);
g := series(f, x, 4);

DIGITS := 20:
float(subs([f, expr(g)], x = -0.01 + 0.0000001*I));
delete DIGITS:

Ситуация подобна для алгебраических точек разветвления:

f := sqrt(x + I*x^3);
g := series(f, x, 4);

DIGITS := 20:
float(subs([f, expr(g)], x = -0.01 + 0.0000001*I));
delete DIGITS:

delete f, g:

Пример 13

Первые шесть сроков, включая обнуляет, следующих двух последовательных расширений согласитесь:

series(sin(tan(x)), x, 12);
series(tan(sin(x)), x, 12);

Если мы хотим вычислить последовательное расширение различия sin(tan(x)) - tan(sin(x)), отмена происходит и производит слишком мало условий в результате. series обнаруживает это автоматически и выполняет второе последовательное вычисление с увеличенной точностью:

series(sin(tan(x)) - tan(sin(x)), x, 6)

Это может, тем не менее, произойти, что результат имеет слишком мало условий; cf. Пример 15.

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

series(x^2*exp(x) + x*sqrt(sin(x)), x, 3)

Пример 14

Управление series термина порядка основано на концепции 'относительного порядка', считая количество условий, начинающихся с самого низкоуровневого, которое присутствует в расширении. Управление 'абсолютной командой' может быть достигнуто путем простого добавления соответствующего термина порядка, чтобы ограничить результат, возвращенный series:

series(exp(x) + x*sqrt(sin(x)), x, 7)

series(exp(x) + x*sqrt(sin(x)), x, 7) + O(x^4)

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

series(exp(x^2), x, 4)

series(exp(x^2), x, 4) + O(x^8)

Пример 15

Если заданный порядок для расширения является слишком маленьким, чтобы вычислить обратную величину (из-за отмены), series отвечает на символьный звонок:

series(exp(x), x, 4)

series(1/(exp(x) - 1 - x - x^2/2 - x^3/6), x, 2)

После увеличения порядка расширение вычисляется, но возможно с меньшим количеством условий:

series(1/(exp(x) - 1 - x - x^2/2 - x^3/6), x, 3);
series(1/(exp(x) - 1 - x - x^2/2 - x^3/6), x, 4)

Пример 16

series и int поддерживают друг друга. С одной стороны, последовательные расширения могут быть интегрированы:

int(series(1/(2 - x), x), x = 0..1)

С другой стороны, series знает, как обработать символьные интегралы:

int(x^x, x)

series(%, x = 0, 3)

int(exp(-x*sin(t)), t = 0.. x)

series(%, x = 0)

int(cos((x*t^2 + x^2*t))^(1/3), t = 0..2)

series(%, x)

Пример 17

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

Мы иллюстрируем, как записать такой серийный атрибут, с помощью случая показательной функции. (Конечно, эта функция уже имеет атрибут series в MuPAD, который можно осмотреть через expose(exp::series).) По порядку, чтобы не перезаписать уже существующий атрибут, мы работаем над копией показательной функции под названием Exp.

Атрибут series должен быть процедурой с четырьмя аргументами. Эта процедура называется каждый раз, когда последовательное расширение Exp с произвольным аргументом должно быть вычислено. Первый аргумент является аргументом Exp в вызове series. Второй аргумент является серийной переменной; точка расширения всегда является источником 0; другие точки расширения внутренне перемещены к источнику заменой переменных. Третье и четвертый аргумент идентичны с order и аргументом dir series, соответственно.

Например, команда series(Exp(x^2 + 2), x, 5) внутренне преобразована в вызов Exp::series(x^2 + x, x, 5, Undirected). Вот пример атрибута series для Exp.

// The series attribute for Exp. It handles the call
// series(Exp(f), x = 0, order, dir)
ExpSeries := proc(f, x, order, dir)
  local t, x0, s, r, i;
begin
  // Expand the argument into a series.
  t := series(f, x, order, dir);

  // Determine the order k of the lowest term in t, so that
  // t = c*x^k + higher order terms, for some non-zero c.
  k := ldegree(t);

  if k = FAIL then
    // t consists only of an error term O(..)
    return(FAIL);

  elif k < 0 then
    // This corresponds to an expansion of exp around infinity,
    // which does not exist for the exponential
    // function, since it has an essential singularity. Thus we
    // return FAIL, which makes series return unevaluatedly. For
    // other special functions, you may add an asymptotic
    // expansion here.
    return(FAIL);

  else // k >= 0
    // This corresponds to an expansion of exp around a
    // finite point x0. We write t = x0 + y, where all
    // terms in y have positive order, use the
    // formula exp(x0 + y) = exp(x0)*exp(y) and compute
    // the series expansion of exp(y) as the functional
    // composition of the Taylor series of exp(x) around
    // x = 0 with t - x0. If your special function has
    // any finite singularities, then they should be
    // treated here.
    x0 := coeff(t, x, 0);
    s := Series::Puiseux::create(1, 0, order,
           [1/i! $ i = 0..(order - 1)], x, 0, dir);
    return(Series::Puiseux::scalmult(s @ (t - x0), Exp(x0), 0))
  end_if
end_proc:

Эта специальная функция должна быть встроена в функциональную среду. Следующая команда задает Exp как функциональную среду и позволяет системной функции, exp делает оценку. Команда subs, примененная на результат, достигает того Exp с символьными аргументами, возвращен как Exp и не как exp.

Exp := funcenv(x -> subs(exp(x), hold(exp)=hold(Exp))):
Exp(1), Exp(-1.0), Exp(x^2 + x)

series может уже обработать эту “новую” функцию, но это может только вычислить Разложение Тейлора с символьными производными:

ORDER := 3: series(Exp(x), x = 0)

Можно задать атрибут series Exp путем присвоения процедуры выше ее слоту series:

Exp::series := ExpSeries:

Теперь мы можем протестировать новый атрибут:

series(Exp(x^2 + x), x = 0) = series(exp(x^2 + x), x = 0)

series(Exp(x^2 + x), x = 2) = series(exp(x^2 + x), x = 2)

series(Exp(x^2 + x), x = 0, 1)

series(Exp(x^2 + x), x = infinity)

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

delete ExpSeries, Exp:

Параметры

f

Арифметическое выражение, представляющее функцию в x

x

Идентификатор

x0

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

order

Количество условий, которые будут вычислены: неотрицательное целое число или infinity. Распоряжение по умолчанию дано переменной окружения ORDER (значение по умолчанию 6).

Опции

Left, Real, Right, Undirected

Если никакое расширение не существует, который допустим в комплексной плоскости, этот аргумент может использоваться, чтобы запросить расширения, которые только должны быть допустимыми вдоль действительной строки. Значением по умолчанию является Undirected.

NoWarning

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

UseGseries

Опция, заданная как UseGseries = b

Используйте Series::gseries, чтобы вычислить ряд. b должен быть TRUE или FALSE. Значением по умолчанию является TRUE. Даже если эта опция будет установлена в TRUE, то вычисление расширения Пюизе будет предпринято сначала.

Возвращаемые значения

Если order является неотрицательным целым числом, то series возвращает или объект доменного типа Series::Puiseux или Series::gseries, выражение типа "series", или, если f является выражением RootOf, набором типа Type::Set. Если order = infinity, то series возвращает арифметическое выражение.

Перегруженный

f