Series:: Puiseux

Усеченные последовательные расширения Пюизе

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

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

Синтаксис

Series::Puiseux(f, x, <order>, <dir>)
Series::Puiseux(f, x = x0, <order>, <dir>)

Описание

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

Системная функция series является главным приложением этой области. Это пытается вычислить Тейлора, Лорана, или ряд Пюизе или более общее последовательное расширение данного арифметического выражения, и результат возвращен как элемент Series::Puiseux или, возможно, более общего доменного Series::gseries.

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

Примечание

Если вы создаете элементы явным образом, как описано выше, то любая специальная математическая функция, такая как sin или exp, включая серийную переменную рассматривается как коэффициент. Используйте series, чтобы расширить такие функции также и использовать конструктора, только если f не содержит специальных математических функций. Cf. Пример 1.

Используйте спецификатор типа Type::Series, чтобы определить для элемента этой области, какой вид последовательного расширения это.

Примечание

Коэффициентам позволяют зависеть подлинейно от переменной последовательного расширения. Например, логарифмические условия в серийной переменной могут появиться как коэффициенты. Следует иметь в виду, что это не ряд Пюизе в математическом смысле. Cf. Пример 4 и страница справки для series.

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

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

Примеры

Пример 1

Можно создать объекты Series::Puiseux в различных способах. Стандартный метод состоит в том, чтобы использовать конструктора. Второй аргумент задает серийную переменную и точку расширения со значением по умолчанию 0, если не использовано:

Series::Puiseux(x/(1 - x), x);
Series::Puiseux(x/(1 - x), x = 2);
Series::Puiseux(x/(1 - x), x = complexInfinity);

Третий аргумент, если есть задает желаемое количество условий. Если это не использовано, значение переменной окружения, ORDER используется:

Series::Puiseux(x/(1 - x), x = 2, 4);
ORDER := 2:
Series::Puiseux(x/(1 - x), x);
delete ORDER:

Методы const, one и zero обеспечивают ярлыки для создания последовательных расширений только с постоянным термином или никаким ненулевым термином вообще. Определение порядка остаточного члена обязательно:

Series::Puiseux::const(PI, x, 4);
Series::Puiseux::one(x = 2, 3);
Series::Puiseux::zero(x = 0, 3/2);
Series::Puiseux::zero(x = complexInfinity, 5);

Обратите внимание на то, что, например, O(x^(3/2)) не является элементом Series::Puiseux, но может быть преобразован конструктором:

f := O(x^(3/2));
g := Series::Puiseux(f, x);
domtype(f), domtype(g)

И конструктор Series::Puiseux и метод отношение const специальные математические функции, такие как exp или sin, как коэффициенты:

Series::Puiseux(sin(x)/(1 - x), x, 4);
Series::Puiseux::const(cos(x), x = 1, 3);

Используйте системную функцию series, если вы хотите расширить специальные функции также:

series(sin(x)/(1 - x), x, 4);

Конструктор возвращает FAIL, если он не может преобразовать вход в элемент Series::Puiseux. Затем series может смочь произвести более общее расширение:

delete a:
Series::Puiseux(x^a/(1 - x), x);
f := series(x^a/(1 - x), x);
domtype(f);

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

Series::Puiseux::create(3, 1, 5, [1/2, 5], x) =
Series::Puiseux::create(3, 1, 5, [1/2, 5], x, 0, Undirected)

Series::Puiseux::create(1, -2, 1, [ln(x), 0, 3], x, complexInfinity);

Пример 2

Мы демонстрируем внутреннюю структуру объектов типа Series::Puiseux:

f := series(exp(x), x = 1);
g := series(sin(sqrt(1/x)), x = infinity);
h := series(sin(sqrt(-x))/x, x = 0)

op(f);
op(g);
op(h)

Серии f и g имеют тип 0, в то время как h имеет тип 1:

op(f, 1), op(g, 1), op(h, 1)

Порядок ветвления f равняется 1, и порядок ветвления и g и h равняется 2:

op(f, 2), op(g, 2), op(h, 2)

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

ldegree(f) = op(f, 3)/op(f, 2),
ldegree(g) = op(g, 3)/op(g, 2),
ldegree(h) = op(h, 3)/op(h, 2);
Series::Puiseux::order(f) = op(f, 4)/op(f, 2),
Series::Puiseux::order(g) = op(g, 4)/op(g, 2),
Series::Puiseux::order(h) = op(h, 4)/op(h, 2);

Для последовательных расширений типа 0 пятый операнд содержит коэффициенты расширения:

op(f, 5) = [coeff(f)];
op(g, 5) = [coeff(g)];

Однако h является расширением типа 1, и затем пятый операнд хранит слагаемых:

op(h, 5);
[coeff(h)];

Шестой операнд содержит серийную переменную и точку расширения:

op(f, 6), Series::Puiseux::indet(f), Series::Puiseux::point(f);
op(g, 6), Series::Puiseux::indet(g), Series::Puiseux::point(g);
op(h, 6), Series::Puiseux::indet(h), Series::Puiseux::point(h);

f расширений и h являются неориентированными, в то время как g является направленным расширением слева вдоль действительной строки к положительной бесконечности:

op(f, 7) = Series::Puiseux::direction(f),
op(g, 7) = Series::Puiseux::direction(g),
op(h, 7) = Series::Puiseux::direction(h);

Примечание

Поскольку внутренняя структура может подвергнуться изменениям, получив доступ к операндам, и элемента Series::Puiseux через op нужно избежать. Используйте соответствующие методы доступа вместо этого.

Пример 3

Вокруг точек разветвления последовательные расширения типа 1 могут аппроксимировать функцию в более широкой области значений, чем те из типа 0:

f := x -> arcsin(x + 1):
g := series(f(x), x, 2);
h := series(f(x), x, 2, Right);

Расширение g, типа 1, аппроксимирует f хорошо в открытом диске, сосредоточенном в начале координат. Однако расширение, h, типа 0, требовали для положительных действительных значений x только, и на самом деле это не аппроксимирует f на отрицательной вещественной оси и в верхней полуплоскости:

op(g);
op(h);

DIGITS := 4:
[f(0.01), f(0.01*I), f(-0.01), f(-0.01*I)];
map([g(0.01), g(0.01*I), g(-0.01), g(-0.01*I)], float);
map([h(0.01), h(0.01*I), h(-0.01), h(-0.01*I)], float);
delete DIGITS:

Метод convert01 преобразовывает последовательное расширение типа 0 в один из типа 1:

h1 := Series::Puiseux::convert01(h);
op(h1);

Обратная конверсия, с помощью метода convert10, находится в не всегда возможна:

op(Series::Puiseux::convert10(h1));
op(Series::Puiseux::convert10(g));

Можно осуществить преобразование при помощи свойств:

assume(x > 0):
op(Series::Puiseux::convert10(g));
unassume(x):

Пример 4

Несмотря на имя, элементы Series::Puiseux могут содержать коэффициентные функции в зависимости от серийной переменной:

f := series(psi(x), x = infinity, 4);
domtype(f), coeff(f, 0)

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

diff(f, x) = series(diff(psi(x), x), x = infinity, 4)

int(f, x) = series(int(psi(x), x), x = infinity, 4)

f @ series(2*x, x = infinity) = series(psi(2*x), x = infinity, 4)

Пример 5

Основные арифметические операции реализованы для элементов Series::Puiseux:

f := series(exp(x), x, 4);
g := series(sqrt(x)/(1 - x), x, 4);
h := series(cot(x), x, 4);

f + g + h;
_plus(f, g, h)

f - h = _subtract(f, h);
-g = _negate(g);

f*g*h;
_mult(f, g, h)

f/g = _divide(f, g);
1/h = _invert(h);

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

f - 1 - x;
h * (sin(x) + x);

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

f := series(arccot(x), x = 0, Left);
g := series(sqrt(sin(x)), x = 0, Right);
f + g

Error: Inconsistent direction. [Series::Puiseux::plus]
h := series(1/x, x = 2, 4);
f * h

Error: Both series must use the same variables and expansion points. [Series::Puiseux::mult]

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

s := series(tanh(x), x, Real);

f + s;
Series::Puiseux::direction(%)

Пример 6

Метод scalmult реализует умножение константой или одним термином:

f := series(1 + 2*x^3, x);
Series::Puiseux::scalmult(f, 5) = 5*f;
Series::Puiseux::scalmult(f, 5, 3) = 5*x^3*f;

g := series(1 + 2*x^3, x = 2, 3);
Series::Puiseux::scalmult(g, 1, 3) = (x - 2)^3*g

h := series(1 + 2*x^3, x = complexInfinity);
Series::Puiseux::scalmult(h, 1, 1/2) = x^(-1/2)*h

Пример 7

Возведение в степень реализовано для интегральных и рациональных экспонент:

f := series(exp(x), x, 3);
f^2 = _power(f, 2);
f^(1/3) = _power(f, 1/3)

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

f^I = series(exp(I*x), x, 3);

g := series(sin(-x), x);
g^I

Error: Exponent must be a rational number. [Series::Puiseux::_power]

Если экспонента содержит серийную переменную, то ошибка происходит:

f^x
Error: Exponent must not contain the series variable. [Series::Puiseux::_power]

Для неориентированных расширений и рациональных экспонент, которые не являются неотъемлемой частью, результат имеет тип 1 в целом:

g^(1/2);
op(%, 1);

Результат упрощает, когда вы задаете одно из направлений Left или Right:

g := series(sin(-x), x, Left):
g^(1/2);
op(%, 1);

g := series(sin(-x), x, Right):
g^(1/2);

Пример 8

Функциональный состав элементов Series::Puiseux реализован методом _fconcat:

f := series(ln(x), x = 1, 4);
g := series(cos(y), y = 0);
f@g = _fconcat(f, g);
series(ln(cos(y)), y = 0, 4);

Если левый аргумент не имеет типа Series::Puiseux, это неявно расширено вокруг предельной точки правильного аргумента перед составом:

f := series(sin(-x), x = 0);
sqrt(y) @ f = Series::Puiseux(sqrt(y), y) @ f;

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

f @ sqrt(y) = f @ Series::Puiseux(sqrt(y), y)

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

f @ tan(y)

f @ series(tan(y), y = 0)

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

g := series(y^2 - 1, y = 0);
f @ g

f @ (y^2 - 1)

f @ series(y^2 - 1, y = 1, 4)

Метод revert вычисляет инверсию усеченного последовательного расширения относительно состава. Точка расширения инверсии является предельной точкой входа и наоборот:

f := series(ln(x), x = 1, 4);
revert(f) = series(exp(x), x = 0, 5)

f := series(cot(x), x = 0);
revert(f) = series(arccot(x), x = complexInfinity);

f @ revert(f), revert(f) @ f

Если серийная переменная происходит в коэффициентах, или флаг типа равняется 1, ошибка происходит:

f := series(ln(sin(x)), x);
g := series(arcsin(x + 1), x, 2);

revert(f)
Error: Unable to compute the functional inverse. [Series::Puiseux::revert]
revert(g)
Error: Unable to compute the functional inverse. [Series::Puiseux::revert]

Пример 9

Методы diff и int реализуют почленное дифференцирование и интегрирование:

f := series(ln(x), x = 1, 4);
g := diff(f, x);
series(1/x, x = 1, 4);
int(g, x);

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

int(f, x = 1..2);

Пример 10

Большинство специальных математических функций перегружается для Series::Puiseux:

f := series(x/(1 - x), x, 4);
exp(f) = series(exp(x/(1 - x)), x, 4);
ln(f) = series(ln(x/(1 - x)), x, 4);

Если система не может вычислить состав, она возвращает символьный вызов функции с оцененными аргументами:

delete g:
g(f)

exp(series(x + 1/x, x = infinity, 5))

В этом случае можно попробовать series, чтобы вычислить состав:

series(exp(x + 1/x), x = infinity, 5)

Пример 11

Системные функции Re, Im и conjugate работают на все действительные последовательные расширения:

f := series(exp(I*x), x, Real);
Re(f) = series(cos(x), x, Real);
Im(f) = series(sin(x), x, Real) + O(x^6);
conjugate(f) = series(exp(-I*x), x, Real);

Кроме тривиальных случаев, символьный вызов функции возвращен для неориентированного расширения:

Re(series(PI, x));
Re(series(exp(I*x), x));

Пример 12

Метод contfrac преобразовывает последовательное расширение в непрерывную дробь:

f := series(exp(x), x, 10);
contfrac(f);

g := series(tan(x), x = PI, 10);
contfrac(g);

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

h := series(ln(x + 1/x), x = infinity);
contfrac(h)

Пример 13

Для последовательных расширений вокруг источника метод laplace, перегружая laplace, вычисляет Преобразование Лапласа почленно, если второй аргумент является серийной переменной. Результатом является последовательное расширение вокруг бесконечности:

delete s:
f := series(exp(x), x);
g := laplace(f, x, s);
series(laplace(exp(x), x, s), s = infinity);

Точно так же ilaplace метода вычисляет обратное Преобразование Лапласа почленно для последовательных расширений вокруг бесконечности, если второй аргумент является серийной переменной. Результатом является последовательное расширение приблизительно 0:

ilaplace(g, s, x)

Преобразование Лапласа и обратное Преобразование Лапласа, соответственно, ряда не целесообразны для точек расширения кроме 0 или бесконечность, соответственно, и в этих случаях возвращен символьный вызов функции:

laplace(series(ln(x), x = 1, 2), x, s);

Если второй аргумент не является серийной переменной, то коэффициенты преобразовываются:

h := series(sin(x*y), x = 1, 2);
laplace(h, y, s);

Пример 14

Когда названо одним аргументом, метод coeff возвращает последовательность всех коэффициентов последовательного расширения:

f := series(tan(x), x);
coeff(f)

g := series(1/(x - 1)^2, x = infinity);
coeff(g)

Когда названо двумя аргументами, coeff возвращает отдельный коэффициент:

coeff(f, -1), coeff(f, 1), coeff(f, 2), coeff(f, 13/2);

Если второй аргумент превышает порядок остаточного члена, coeff возвращает FAIL:

coeff(f, 10)

Когда точкой расширения является complexInfinity, coeff(s, n) возвращает коэффициент, где x является серийной переменной s:

coeff(g, 2), coeff(g, -3), coeff(g, -15/2)

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

coeff(f) = coeff(f, x);
coeff(f, 3) = coeff(f, x, 3)

Для последовательных расширений типа 1 “коэффициенты” в целом включают серийную переменную:

h := series(sin(sqrt(-x)), x);
coeff(h);
coeff(h, 3/2);

Пример 15

Метод ldegree возвращает порядок ведущего срока последовательного расширения. Когда точкой расширения является complexInfinity, и ведущий термин, затем это - n:

f := series(x*sin(sqrt(-x)), x);
g := series(cot(x), x = PI);
h := series(2*arccot(x), x = infinity);

ldegree(f), ldegree(g), ldegree(h)

Метод lcoeff возвращает коэффициент ведущего термина. Для расширения типа 1 это обычно включает серийную переменную:

lcoeff(f), lcoeff(g), lcoeff(h)

Метод lterm возвращает сам ведущий термин:

lterm(f), lterm(g), lterm(h)

Наконец, метод lmonomial возвращает целое слагаемое:

lmonomial(f) = lcoeff(f)*lterm(f);
lmonomial(g) = lcoeff(g)*lterm(g);
lmonomial(h) = lcoeff(h)*lterm(h);

Если последовательное расширение состоит только из O - термин, все четыре метода возвращают FAIL:

s := Series::Puiseux::zero(x, 6);
ldegree(s), lcoeff(s), lterm(s), lmonomial(s)

Пример 16

Методы nthcoeff, nthmonomial и nthterm возвращают n th ненулевой коэффициент, одночлен или термин, соответственно, последовательного расширения. В отличие от полиномов, они рассчитывают от термина самых низкоуровневых на, т.е. упорядоченное расположение возрастает экспонентой для конечных точек расширения и убывает экспонентой, когда точкой расширения является complexInfinity:

f := series(x*sin(sqrt(-x)), x);
g := series(cot(x), x = PI);
h := series(2*arccot(x), x = infinity);

nthcoeff(f, 1) = lcoeff(f);
nthmonomial(g, 1) = lmonomial(g);
nthterm(h, 1) = lterm(h);

nthcoeff(f, 3), nthmonomial(f, 3), nthterm(f, 3);
nthcoeff(g, 3), nthmonomial(g, 3), nthterm(g, 3);
nthcoeff(h, 3), nthmonomial(h, 3), nthterm(h, 3);

Если второй аргумент не положителен или превышает количество ненулевых слагаемых, все три метода возвращают FAIL:

nthcoeff(f, -4), nthterm(g, 0), nthmonomial(h, 4)

Пример 17

Мы иллюстрируем различие между упорядоченным расположением условий в последовательными расширениями и полиномах. Упорядоченное расположение условий в полиноме согласовывает с упорядоченным расположением условий в последовательном расширении с точкой расширения complexInfinity:

f := poly(2*(x^2 + x)^3);
g := series(f, x = complexInfinity);
[lcoeff(f), lmonomial(f), lterm(f)];
[lcoeff(g), lmonomial(g), lterm(g)];

[nthcoeff(f, 2), nthmonomial(f, 3), nthterm(f, 4)];
[nthcoeff(g, 2), nthmonomial(g, 3), nthterm(g, 4)];

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

h := series(f, x = 0);  
[lcoeff(h), lmonomial(h), lterm(h)];
[nthcoeff(h, 2), nthmonomial(h, 3), nthterm(h, 4)];

Пример 18

iszero метода проверяет, не имеет ли последовательное расширение никаких ненулевых слагаемых кроме O - термин:

f := series(exp(x), x);
g := Series::Puiseux(0, x = 2, 4);
iszero(f), iszero(g)

Пример 19

Методы convert пытаются преобразовать произвольный объект в элемент Series::Puiseux. Если вход не предлагает точку расширения, convert использует источник:

f := asympt(1/(x + 1), x = infinity);
g := sin(x)/(1 - x);
h := poly((x + 1)^10);
u := O((x - 1)^3, x = 1);

domtype(f), domtype(g), domtype(h), domtype(u)

F := Series::Puiseux::convert(f);
G := Series::Puiseux::convert(g);
H := Series::Puiseux::convert(h);
U := Series::Puiseux::convert(u);

convert возвращает FAIL, если это не может преобразовать вход, например, потому что вход содержит не или больше чем один неопределенный:

Series::Puiseux::convert(sin(1)),
Series::Puiseux::convert([1, y, 3])

Метод convert_to пытается преобразовать элемент Series::Puiseux в заданный тип:

Series::Puiseux::convert_to(F, Series::gseries);
Series::Puiseux::convert_to(F, contfrac);
Series::Puiseux::convert_to(G, DOM_EXPR);
Series::Puiseux::convert_to(H, DOM_POLY);
Series::Puiseux::convert_to(H, O);
Series::Puiseux::convert_to(U, O);

convert_to возвращает FAIL, если это не может выполнить требуемое преобразование:

Series::Puiseux::convert_to(F, O),
Series::Puiseux::convert_to(F, DOM_LIST)

Пример 20

Метод expr преобразовывает элемент Series::Puiseux в арифметическое выражение, отбрасывая O - термин. В целом упорядоченное расположение слагаемых не сохраняется:

f := series(exp(x*y), x);
g := series(ln(x), x = 1, 3);

expr(f);
expr(g);

Метод float применяет системную функцию float ко всем коэффициентам:

float(f);
float(g);

Пример 21

Методы combine, expand и normal применяют соответствующие системные функции ко всем коэффициентам:

delete a, y:
f := series(y/(x + y^a), x, 4);
g := combine(f);
expand(g);

По причинам эффективности арифметические методы Series::Puiseux обычно не выполняют символьных упрощений. Используйте expand или normal, чтобы упростить результаты:

h := series(exp(x), x, 4)^a;
expand(h);
normal(h);

u := series(arctanh(x + y), x, 4);
normal(u);

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

v := Series::Puiseux::create(1, 3, 10,
                             [0, 1/2, 0, 5, 0, 0], x, 2);
coeff(v);
normal(v);
coeff(%);

Метод map применяет заданную функцию ко всем коэффициентам. Например, системная функция, factor не перегружается для Series::Puiseux, но можно использовать map, чтобы выразить все коэффициенты в учтенной форме:

map(u, factor);

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

w := series(exp(x), x, 3);
map(w, _mult, PI) = PI*w

Для последовательных расширений типа 1 map применяет функцию ко всем ненулевым коэффициентам, как возвращено coeff:

z := series(sin(sqrt(-x)), x);
coeff(z);
map(z, cos);

Пример 22

Три различных метода могут использоваться, чтобы заменить серийную переменную: _fconcat, func_call и subs. Предположим, что f является элементом Series::Puiseux, и мы хотим заменить выражением t серийную переменную x. Затем _fconcat преобразовывает t в последовательное расширение вокруг источника через конструктора, вычисляет функциональный состав и возвращает результат как элемент Series::Puiseux:

f := series(exp(x), x = 0, 5);
Series::Puiseux::_fconcat(f, y) = f @ y;
f @ (y^2 + y);

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

f @ (y + 1);

f @ sin(y);

Кроме того, состав не работает, если выражение t является постоянным или содержит больше чем один неопределенный:

f @ PI;
Error: Unable to compute composition. [Series::Puiseux::_fconcat]
f @ (x + y);
Error: Unable to compute composition. [Series::Puiseux::_fconcat]

Можно осуществить состав путем явного преобразования t в ряд:

f @ series(y + 1, y = -1);
f @ series(sin(y), y = 0);
f @ series(x + y, x = -y);

Замена с func_call всегда работает. Это отбрасывает остаточный член, t заменяют буквально, и результатом является выражение и не объект типа Series::Puiseux:

f(5) = Series::Puiseux::func_call(f, 5);
f(y) = Series::Puiseux::func_call(f, y);

f(y^2 + y);
f(y + 1);
f(sin(y));
f(PI);
f(x + y);

Наконец, если subs используется, чтобы заменить серийную переменную, только совершенно особые замены позволены (см. описание subs выше для получения дополнительной информации). Затем замена переменной выполняется, и результат снова имеет тип Series::Puiseux:

subs(f, x = y^2 + y)
Error: Invalid substitution. [Series::Puiseux::subs]
subs(f, x = y + 1)

subs(f, x = sin(y))
Error: Invalid substitution. [Series::Puiseux::subs]
subs(f, x = PI)
Error: Invalid substitution. Exactly one indeterminate expected. [Series::Puiseux::subs]
subs(f, x = x + y)
Error: Invalid substitution. Exactly one indeterminate expected. [Series::Puiseux::subs]

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

s := series(ln(x^2 + x), x);
s @ (2*y);
s(2*y);
subs(s, x = 2*y);

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

g := series(cos(x + y), x, 4);
h := series(1/x, x = y, 4);

subs(g, y = PI) = series(cos(x + PI), x, 4);
subs(h, y = 2) = series(1/x, x = 2, 4);

Даже одновременные замены возможны в коэффициентах:

subs(g, [hold(sin) = cos, hold(cos) = sin, y = 2])

Ошибка происходит, если правая сторона содержит серийную переменную:

subs(h, y = x)
Error: Invalid substitution. Right side must not contain the series variable. [Series::Puiseux::subs]

Пример 23

Проверки has метода, происходит ли объект синтаксически в коэффициентах, серийной переменной, точке расширения или направлении элемента Series::Puiseux:

f := series(sin(x + 2*y), x = PI, 2);
has(f, x), has(f, y), has(f, PI), has(f, 2), has(f, Undirected);
has(f, hold(sin)), has(f, 3), has(f, sin(2*y)), has(f, x - PI);

Последняя возможность возвращает FALSE начиная с выражения, x - PI происходит только на экране вывод, но не на внутреннем представлении f.

g := series(sign(x), x, Right);
has(g, Right), has(g, Undirected);

Пример 24

Метод truncate отбрасывает слагаемых до данного распоряжения:

f := series(x*sin(sqrt(x)), x);
Series::Puiseux::truncate(f, 10);
Series::Puiseux::truncate(f, 9/2);
Series::Puiseux::truncate(f, 7/2);
Series::Puiseux::truncate(f, 3);
Series::Puiseux::truncate(f, 3/2);
Series::Puiseux::truncate(f, 1);

Параметры

f

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

x

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

x0

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

order

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

dir

Или Left, Right, Real или Undirected. Этот дополнительный аргумент может использоваться, чтобы указать, что получившееся расширение возможно допустимо вдоль действительной строки только. Значением по умолчанию является Undirected, что означает, что расширение допустимо в окружении точки расширения в комплексной плоскости.

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

объект доменного типа Series::Puiseux или значение FAIL, если f не может быть преобразован, например, если степени с нерациональными экспонентами происходят в f.

Вызовы функции

При вызове элемента Series::Puiseux, когда функция отбрасывает остаточный член и заменяет первым аргументом серийную переменную. См. описание метода "func_call" и Пример 22.

Операции

Series::Puiseux реализует основную арифметику усеченных последовательных расширений. Используйте обычные арифметические операторы +, -, *, /, ^ и @ для состава.

Арифметические методы Series::Puiseux обычно не выполняют символьных упрощений. Используйте combine, expand или normal, чтобы запросить такие упрощения явным образом.

Смотрите пример 5 и пример 21.

Специальные математические функции, такие как exp или sin, перегружаются для элементов Series::Puiseux; cf. Пример 10.

Системные функции coeff, lcoeff, nthcoeff, ldegree, lmonomial, nthmonomial, lterm и nthterm работают над усеченными последовательными расширениями. Обратите внимание на то, что в отличие от полиномов, коэффициенты, одночлены и условия считаются от термина термина самого низкоуровневого на. Cf. Пример 17.

Используйте функциональный expr, чтобы преобразовать последовательное расширение на арифметическое выражение (как элемент области ядра).

Операнды

Серия доменного типа Series::Puiseux имеет следующие семь операндов:

  1. тип flagt ∈ {0, 1},

  2. ветвление orderb, положительное целое число,

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

  4. целочисленный ev, таким образом, который порядок остаточного члена,

  5. список коэффициентов l 1, …, l n,

  6. ряд variablex и расширение pointx0 в форме уравнения x = x 0; точкой расширения x 0 может быть complexInfinity также,

  7. направление, Undirected, Real, Left или Right.

Флаг типа различает два различных внутренних представления.

Если t = 0, то операнды выше представляют усеченное последовательное расширение

.

Если точка расширения, x 0 является complexInfinity, то операнды представляют усеченное расширение

.

  • Слагаемое (или, соответственно) называется одночленом расширения,

  • степень (или, соответственно) называется термином,

  • l i является соответствующим коэффициентом, и

  • экспонента является порядком соответствующего термина или одночлена.

Если t = 1, то операнды выше представляют расширение

.

В этом случае степени x - x 0 явным образом хранится в списке и l, i содержит только условия порядка роста. Соответствующее расширение для x0 = complexInfinity

,

и l i содержит только условия порядка роста.

Термин понятий и порядок эквивалентны для t = 0, слагаемое l, i называется одночленом, и соответствующий коэффициент

(или

,

соответственно).

Последний тип представления служит для правильных расширений вокруг точек разветвления. Например, если мы хотим расшириться вокруг x = 0, затем усеченный ряд Пюизе не аппроксимирует f (x) в более низкой половине комплексной плоскости. С t = 1, расширение, которое аппроксимирует f (x) также в более низкой части комплексной плоскости около источника, может быть представлено как объект доменного типа Series::Puiseux.

Направление d имеет то же значение как параметр dir конструктора. Если d = Undirected, операнды выше представляют расширение, допустимое в некотором окружении точки расширения в комплексной плоскости. Обычно, это - открытый диск, сосредоточенный в x0. Если dUndirected и x 0 представляет вещественное число, это означает, что расширение допустимо для действительных значений x только. Если d = Left или d = Right, то расширение допустимо для x <x 0 или x> x 0, соответственно.

В случае x_0 = complexInfinity, и если d = Undirected, у нас есть расширение, допустимое в окружении Северного полюса Римановой сферы, т.е. для всего достаточно большого абсолютного значения. Если d = Left, у нас есть расширение вокруг положительной действительной бесконечности, допустимой для достаточно больших действительных значений x. Точно так же, если d = Right, у нас есть расширение вокруг отрицательной действительной бесконечности, допустимой для достаточно больших отрицательных действительных значений x. Наконец, если d = Real, расширение допустимо и вокруг infinity и вокруг - ∞.

Cf. Пример 2.

Создание элемента

Как правило, объекты типа Series::Puiseux сгенерированы вызовами series или taylor.

Методы

развернуть все

Математические методы

conjugate(s)

Этот метод перегружает системную функцию conjugate. Cf. Пример 11.

contfrac(s)

Этот метод перегружает системную функцию contfrac. Cf. Пример 12.

diff(s, t)

Этот метод перегружает системную функцию diff. Cf. Пример 9.

_divide(s, t)

_fconcat(s, t)

Если и s и t имеют тип Series::Puiseux, то функциональный состав может только быть задан, если предельная точка t для значений близко к ее точке расширения равна точке расширения s. В противном случае ошибка происходит.

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

Этот метод перегружает системную функцию _fconcat для последовательных расширений, т.е. можно использовать его в форме s@t. Смотрите Пример 8 и Пример 22.

Im(s)

Этот метод перегружает системную функцию Im. Cf. Пример 11.

int(s, t | t = a .. b)

Этот метод перегружает системную функцию int. Cf. Пример 9, и страница справки int для описания дальнейших дополнительных аргументов.

_invert(s)

Этот метод перегружает системную функцию _invert, т.е. можно использовать его в форме 1/s.

ilaplace(s, u, v)

Если u не является серийной переменной s, то коэффициенты s преобразовываются, но не точка расширения. В противном случае точка расширения s должна быть бесконечностью, v должен быть идентификатором, и s преобразовывается почленно. Результатом является затем последовательное расширение вокруг v = 0.

Этот метод перегружает функциональный ilaplace для последовательных расширений. Cf. Пример 13.

laplace(s, u, v)

Если u не является серийной переменной s, то коэффициенты s преобразовываются, но не точка расширения. В противном случае точка расширения s должна быть 0, порядок ведущего термина s должен быть неотрицательным, v должен быть идентификатором, и s преобразовывается почленно. Результатом является затем последовательное расширение вокруг v = ∞.

Этот метод перегружает функциональный laplace для последовательных расширений. Cf. Пример 13.

_mult(s, t, , …)

Используйте метод Series::Puiseux::scalmult, чтобы умножить последовательное расширение s на константу или степень x - x 0.

Этот метод перегружает системную функцию _mult для последовательных расширений, т.е. можно использовать его в форме s*t*.... Cf. Пример 5.

_negate(s)

Этот метод перегружает системную функцию _negate, т.е. можно использовать его в форме -s.

_plus(s, t, , …)

Этот метод перегружает системную функцию _plus для последовательных расширений, т.е. можно использовать его в форме s+t+.... Cf. Пример 5.

_power(s, n)

Если n является рациональным числом, направлением s является Undirected или Real, и ведущий коэффициент s не положителен, то флаг типа результата равняется 1 в целом.

Если n не является рациональным числом, то ведущее слагаемое s не должно содержать серийную переменную. В противном случае ошибка происходит.

Этот метод перегружает системную функцию _power для последовательных расширений, т.е. можно использовать его в форме s^n. Cf. Пример 7.

Re(s)

Этот метод перегружает системную функцию Re. Cf. Пример 11.

revert(s)

Точка расширения инверсии является предельной точкой s.

Этот метод перегружает системную функцию revert. Cf. Пример 8.

Series::Puiseux::scalmult(s, a, k)

series(s, y | y = y0, <order>, <dir>)

Этот метод перегружает системную функцию series.

_subtract(s, t)

Методы доступа

coeff(s, <x>, n)

coeff(s, <x>)

Второй вызов возвращает последовательность всех коэффициентов s, начиная с коэффициента самых низкоуровневых. (Это - коэффициент термина с самой высокой экспонентой если x 0=complexInfinity.)

Определение переменной x является дополнительным; если это присутствует, это должно совпасть с серийной переменной s.

Этот метод перегружает системную функцию coeff. Cf. Пример 14.

Series::Puiseux::direction(s)

Series::Puiseux::indet(s)

iszero(s)

Этот метод перегружает системную функцию iszero. Cf. Пример 18.

lcoeff(s)

Этот метод перегружает системную функцию lcoeff. Смотрите Пример 15 и Пример 17.

ldegree(s)

Этот метод перегружает системную функцию ldegree. Смотрите Пример 2 и Пример 15.

lmonomial(s)

Этот метод перегружает системную функцию lmonomial. Смотрите Пример 15 и Пример 17.

lterm(s)

Этот метод перегружает системную функцию lterm. Смотрите Пример 15 и Пример 17.

nthcoeff(s, n)

Этот метод перегружает системную функцию nthcoeff. Смотрите Пример 16 и Пример 17

nthmonomial(s, n)

Этот метод перегружает системную функцию nthmonomial. Смотрите Пример 16 и Пример 17.

nthterm(s, n)

Этот метод перегружает системную функцию nthterm. Смотрите Пример 16 и Пример 17.

Series::Puiseux::order(s)

Series::Puiseux::point(s)

Методы преобразования

convert(f)

Если никакая точка расширения не может быть определена от f, источник используется. Cf. Пример 19.

convert_to(s, T)

Используйте функциональный expr, чтобы преобразовать s в объект области ядра.

Series::Puiseux::convert01(s)

Series::Puiseux::convert10(s)

Для неориентированных расширений преобразование не возможно в целом, и затем s возвращен. Однако можно осуществить преобразование (с не обязательно эквивалентным результатом) при помощи свойств. Cf. Пример 3.

expr(s)

Этот метод перегружает системную функцию expr. Cf. Пример 20.

float(s)

Этот метод перегружает системную функцию float. Cf. Пример 20.

Технические методы

combine(s)

Этот метод перегружает системную функцию combine; смотрите соответствующую страницу справки для дальнейших дополнительных аргументов. Cf. Пример 21.

Series::Puiseux::const(f, x | x = x0, n, <d>)

Если точка расширения, x0 не использован, x0 = 0, принята. Если направление, d не использован, d = Undirected, принято.

Используйте с осторожностью, поскольку эта функция не выполняет проверку типа. Cf. Пример 1.

Series::Puiseux::create(b, v, e, l, x, <x0>, <d>)

Если точка расширения, x0 не использован, x0 = 0, принята. Если направление, d не использован, d = Undirected, принято.

Используйте с осторожностью, поскольку эта функция не выполняет проверку типа. Cf. Пример 1.

expand(s)

Этот метод перегружает системную функцию expand; смотрите соответствующую страницу справки для дальнейших дополнительных аргументов. Cf. Пример 21.

Series::Puiseux::func_call(s, t)

Можно также использовать этот метод в форме s(t). Cf. Пример 22.

has(s, t)

Этот метод перегружает системную функцию has. Cf. Пример 23.

map(s, f, <arg1, , …>)

Этот метод перегружает системную функцию map. Cf. Пример 21.

normal(s)

Этот метод перегружает системную функцию normal. Cf. Пример 21.

Series::Puiseux::one(x, <x0>, n, <d>)

Если точка расширения, x0 не использован, x0 = 0, принята. Если направление, d не использован, d = Undirected, принято.

Используйте с осторожностью, поскольку эта функция не выполняет проверку типа. Cf. Пример 1.

print(s)

Series::Puiseux::truncate(s, n)

Cf. Пример 24.

subs(s, old = new)

subs(s, [old1 = new1, old2 = new2, …])

Если серийная переменная x s не происходит в левых сторонах old, old1, old2, ..., то замена происходит в коэффициентах и в точке расширения s. Серийная переменная не должна происходить в правых сторонах new, new1, new2, ....

Примечание

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

Во втором вызове серийная переменная x s не должна происходить нигде в уравнениях замены. В первом вызове x позволяют произойти в old, только если old равняется x. В этом случае замена переменной выполняется, и new должен иметь форму

x0 + a*(b*y - c)^k

если x0 <> complexInfinity и

a*(b*y - c)^k

если x0 = complexInfinity, где

  • x0 является точкой расширения s

  • k является ненулевым рациональным числом

  • y является идентификатором, который может быть равен x, и в противном случае y не должен происходить в коэффициентах s.

  • a, b, c является арифметическими выражениями, не включающими y с a, b, являющимся ненулевым. Если направлением s не является Undirected, то a и b должны представлять вещественные числа.

  • c является нулем, если или x0 <> complexInfinity и k положительны или x0 = complexInfinity, и k отрицателен. В этом случае результат замены имеет точку расширения complexInfinity.

  • Если c является ненулевым, то результат замены имеет точку расширения c/b.

Используйте один из методов "_fconcat" или "func_call" для более общих замен на серийную переменную.

Этот метод перегружает системную функцию subs; Cf. Пример 22.

Series::Puiseux::zero(x, <x0>, n, <d>)

Если точка расширения, x0 не использован, x0 = 0, принята. Если направление, d не использован, d = Undirected, принято.

Примечание

Несмотря на то, что Series::Puiseux::zero(x, n) и O(x^n) математически эквивалентны и распечатаны таким же образом, они - различные объекты MuPAD®. Первый - элемент типа Series::Puiseux, в то время как последний является элементом типа O.

Используйте с осторожностью, поскольку эта функция не выполняет проверку типа. Cf. Пример 1.

Смотрите также

Функции MuPAD

Области MuPAD