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 не содержит специальных математических функций. См. Пример 1.

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

Примечание

Коэффициентам позволяют зависеть подлинейно от переменной последовательного расширения. Например, логарифмические условия в серийной переменной могут появиться как коэффициенты. Следует иметь в виду, что это не ряд Пюизе в математическом смысле. См. Пример 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расширение, и 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действительный, или Undirected. Этот дополнительный аргумент может использоваться, чтобы указать, что получившееся расширение возможно допустимо вдоль действительной линии только. Значением по умолчанию является Undirected, что означает, что расширение допустимо в окружении точки расширения в комплексной плоскости.

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

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

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

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

Операции

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

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

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

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

Системные функции coeff, lcoeff, nthcoeff, ldegree, lmonomial, nthmonomial, lterm, и nthterm работайте над усеченными последовательными расширениями. Обратите внимание на то, что в отличие от полиномов, коэффициенты, одночлены и условия считаются от термина термина самого низкоуровневого на. См. Пример 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действительный, 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 и вокруг - ∞.

См. пример 2.

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

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

Методы

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

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

conjugate(s)

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

contfrac(s)

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

diff(s, t)

Этот метод перегружает системную функцию diff. См. пример 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. См. пример 11.

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

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

_invert(s)

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

ilaplace(s, u, v)

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

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

laplace(s, u, v)

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

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

_mult(s, t, , …)

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

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

_negate(s)

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

_plus(s, t, , …)

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

_power(s, n)

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

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

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

Re(s)

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

revert(s)

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

Этот метод перегружает системную функцию revert. См. пример 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. См. пример 14.

Series::Puiseux::direction(s)

Series::Puiseux::indet(s)

iszero(s)

Этот метод перегружает системную функцию iszero. См. пример 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, источник используется. См. Пример 19.

convert_to(s, T)

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

Series::Puiseux::convert01(s)

Series::Puiseux::convert10(s)

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

expr(s)

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

float(s)

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

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

combine(s)

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

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

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

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

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

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

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

expand(s)

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

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

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

has(s, t)

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

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

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

normal(s)

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

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

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

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

print(s)

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

См. пример 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; См. пример 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.

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

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

Функции MuPAD

Области MuPAD