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
, который определяет количество по умолчанию условий в последовательных вычислениях.
Мы вычисляем последовательное расширение 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:
Этот пример вычисляет состав s
отдельно, т.е. последовательное расширение sin (sin (x)).
s := series(sin(x), x): s @ s = series(sin(sin(x)), x)
delete s:
Мы вычисляем последовательное расширение функции тангенса вокруг источника двумя способами:
series(sin(x), x) / series(cos(x), x) = series(tan(x), x)
bool(%)
Мы вычисляем расширение Лорана вокруг точки 1:
s := series(1/(x^2 - 1), x = 1)
testtype(s, Type::Series(Taylor)), testtype(s, Type::Series(Laurent))
Без дополнительного аргумента или с опцией 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)
В 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)
Мы вычисляем последовательные расширения вокруг бесконечности:
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:
Колебание, но ограниченные функции может появиться в “коэффициентах” последовательного расширения также:
s := series(sin(x + 1/x), x = infinity)
domtype(s), testtype(s, Type::Series(Puiseux))
coeff(s, -1)
Алгебраическое уравнение 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]
В этом примере мы вычисляем формулу для n-th коэффициент a n в Разложении Тейлора функции вокруг нуля путем определения infinity
как order
. Результатом является символьная сумма:
series(exp(-x), x, infinity)
Если вход является многочленным выражением, то так вывод:
series(x^5 - 1, x = 1, infinity)
Никакое асимптотическое расширение не существует для функции Бесселя Дж незаданного индекса, и series
возвращает символьный вызов функции:
series(besselJ(k, x), x=infinity)
domtype(%), type(%)
Разрез логарифма и квадратного корня является отрицательной вещественной осью. Для последовательного расширения на разрезе 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:
Первые шесть сроков, включая обнуляет, следующих двух последовательных расширений согласитесь:
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)
Управление 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)
Если заданный порядок для расширения является слишком маленьким, чтобы вычислить обратную величину (из-за отмены), 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)
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)
Пользователи могут расширить степень 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:
|
Арифметическое выражение, представляющее функцию в |
|
Идентификатор |
|
Точка расширения: арифметическое выражение. Если не заданный, точка 0 расширения по умолчанию используется. |
|
Количество условий, которые будут вычислены: неотрицательное целое число или |
|
Если никакое расширение не существует, который допустим в комплексной плоскости, этот аргумент может использоваться, чтобы запросить расширения, которые только должны быть допустимыми вдоль действительной строки. Значением по умолчанию является |
|
Подавляет предупреждающие сообщения, распечатанные во время последовательного вычисления. Это может быть полезно, если |
|
Опция, заданная как Используйте |
Если order
является неотрицательным целым числом, то series
возвращает или объект доменного типа Series::Puiseux
или Series::gseries
, выражение типа "series"
, или, если f
является выражением RootOf
, набором типа Type::Set
. Если order = infinity
, то series
возвращает арифметическое выражение.
f
O
| ORDER
| RootOf
| Series::Puiseux
| Series::gseries
| Type::Series
| asympt
| limit
| mtaylor
| solve
| taylor