poly
, Expr
, IntMod
Создайте полином
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
poly(f
, <[x1, x2, …]
>, <ring
>) poly(p
, <[x1, x2, …]
>, <ring
>) poly(list
,[x1, x2, …]
, <ring
>) poly(coeffs
,[x]
, <ring
>)
poly(f)
преобразовывает многочленное выражение f
в полином области ядра DOM_POLY
.
Область ядра DOM_POLY
представляет полиномы. Арифметика для этой структуры данных более эффективна, чем арифметика для многочленных выражений. Кроме того, эта область позволяет вам использовать специальные содействующие звонки, которые не могут быть представлены выражениями. Функциональный poly
является инструментом для генерации полиномов этого типа.
poly(f, [x1, x2, ...], ring)
преобразовывает выражение f
в полином в indeterminates x1, x2, ...
по заданному содействующему звонку. Функция poly
не требует расширенной формы выражения f
. Функция внутренне расширяет выражения.
Если вы не задаете indeterminates, MuPAD® ищет их внутренне. Если MuPAD не может идентифицировать indeterminates, он возвращает FAIL
.
По умолчанию функция poly
использует содействующий звонок произвольных выражений MuPAD. В этом случае можно использовать произвольные выражения MuPAD в качестве коэффициентов.
Если функция poly
не может преобразовать выражение в полином, функция возвращает FAIL
. Смотрите Пример 10.
Если f
является доменным элементом, системные вызовы f::dom::poly
для преобразования в полином. Если f
содержит доменные элементы, система рекурсивно вызывает f::dom::poly
для доменных элементов в f
. Смотрите Пример 11.
poly(p, [x1, x2, ...], ring)
преобразовывает полиномиальный p
типа DOM_POLY
к полиному в indeterminates x1, x2, ...
по заданному содействующему звонку. indeterminates и содействующий звонок являются частью структуры данных DOM_POLY
. Используя этот вызов функции, можно изменить indeterminates и содействующий звонок полинома.
Если вы не задаете indeterminates, poly
использует indeterminates исходного полиномиального p
.
Если вы не задаете содействующий звонок, poly
использует звонок исходного полиномиального p
.
poly(list, [x])
преобразовывает список коэффициентов [a 0, a 1, a 2, …] к одномерному полиномиальному a 0 + a 1 x + a 2 x2 + …. Смотрите Пример 3.
Для одномерного полиномиального p
вызов poly(list, [x])
преобразовывает результат вызова coeff(p, All)
назад к полиному.
poly(list, [x1, x2, ...], ring)
преобразовывает список коэффициентов и экспонент к полиному в indeterminates x1, x2, ...
по заданному содействующему звонку. Смотрите Пример 4 и Пример 7.
Этот вызов является самым быстрым методом, чтобы создать полиномы типа DOM_POLY
, потому что вход уже имеет форму, которую MuPAD использует внутренне.
Список должен содержать элемент для каждого ненулевого одночлена полинома. Поэтому необходимо использовать разреженный вход, включающий только ненулевые термины. В частности, пустой список приводит к нулевому полиному.
Каждый элемент списка должен быть списком с двумя элементами: коэффициент одночлена и экспоненты (или вектор экспоненты). Для одномерного полинома в переменной x, списке
соответствует c 1 xe1 + c 2 xe2 + …. Для многомерного полинома векторы экспоненты являются списками, содержащими экспоненты всего indeterminates полинома. Порядок экспонент должен совпасть с распоряжением, данным списком indeterminates. Для многомерного полинома в переменных x 1, x 2, термин список
соответствует c 1 x1e11 x2e12 + c 2 x1e21 x2e22 + ….
Порядок элементов термина список не влияет на получившийся полином. Если вы обеспечиваете многократные въезды, соответствующие тому же термину, poly
добавляет коэффициенты.
Этот вызов позволяет вам восстановить полиномы от термина списки, возвращенные poly2list
.
Положение indeterminates во входном списке [x1, x2, ...]
определяет их порядок в получившемся полиноме. Если вы не задаете indeterminates, MuPAD ищет выражение f
возможный indeterminates и определяет их порядок. Смотрите Пример 2.
Можно выполнить арифметические операции на полиномах, которые имеют тот же indeterminates и тот же содействующий звонок. Кроме того, можно выполнить арифметические операции на полиномах и арифметические выражения. Когда вы работаете с полиномом и арифметическим выражением, MuPAD внутренне преобразовывает то арифметическое выражение в полином и выполняет вычисление. Смотрите Пример 1.
Функция poly
не ограничивает приемлемый indeterminates идентификаторами или индексированными идентификаторами. Можно использовать любое выражение (за исключением рациональных выражений) как неопределенное. Например, poly
принимает выражения sin(x)
и f(x)
как indeterminates. Смотрите Пример 5.
После создания полинома функция poly
не оценивает коэффициенты полинома. Если коэффициенты содержат свободные идентификаторы, poly
не заменяет эти идентификаторы на их значения. Смотрите Пример 12.
Если какая-либо область типа, который DOM_DOMAIN
обеспечивает арифметическим операциям, можно использовать ту область в качестве содействующего звонка. Смотрите раздел “Background” для деталей.
Если вы задаете содействующую область, MuPAD принимает только элементы той области как коэффициенты полинома. На входе poly
пытается преобразовать многочленное выражение f
в полином по содействующему звонку. Для некоторых содействующих звонков вы не можете использовать арифметические выражения, чтобы представлять полином. Причина состоит в том, что умножение с indeterminates может быть недопустимой операцией в звонке. В таких случаях можно задать полином при помощи списка терминов. Смотрите Пример 7.
Функция poly
создает полином из многочленного выражения:
p := poly(2*x*(x + 3))
Операторы *
, +
, -
и ^
работают над полиномами:
p^2 - p*(p + 1)
Можно умножить полином на арифметическое выражение. MuPAD внутренне преобразовывает выражение в полином соответствующего типа, и затем умножает полиномы. Например, умножьте полиномиальный p
на постоянные 5:
p*5
Теперь, умножьте полиномиальный p
на x - 1
:
p*(x - 1)
Если MuPAD не может преобразовать выражение в полином соответствующего типа, арифметической операции между полиномом и этим выражением сбои:
p*(1/x - 1)
Error: Invalid argument. [_mult]
delete p:
Можно создать полином с параметрами. В следующем вызове y
является параметром (не неопределенное):
poly((x*(y + 1))^2, [x])
Если вы не задаете indeterminates, MuPAD пытается найти indeterminates автоматически. Следующий вызов преобразовывает многомерное выражение в многомерный полином:
poly((x*(y + 1))^2)
Теперь, задайте порядок indeterminates явным образом:
poly((x*(y + 1))^2, [y, x])
Используйте функцию poly
, чтобы преобразовать следующий список коэффициентов к одномерному полиному в x
. Первая запись списка производит термин с нулевой экспонентой. Последняя запись производит термин с самой высокой экспонентой:
p := poly([1, 2, 3, 4, 5], [x])
Чтобы вернуться упорядоченное расположение коэффициентов в полиноме, используйте функцию revert
:
revert(p)
Создайте следующие полиномы списками терминов:
poly([[c2, 3], [c1, 7], [c3, 0]], [x])
Если вы обеспечиваете несколько коэффициентов, соответствующих той же экспоненте, poly
добавляет те коэффициенты:
poly([[c2, 3], [c1, 7], [c3, 0], [a, 3]], [x])
Для многомерных полиномов задайте векторы экспоненты списками:
poly([[c1, [2, 2]], [c2, [2, 1]], [c3, [2, 0]]], [x, y])
Можно использовать выражения в качестве indeterminates:
poly(f(x)*(f(x) + x^2))
Кольцо классов вычетов IntMod(7)
является допустимым содействующим звонком:
p := poly(9*x^3 + 4*x - 7, [x], IntMod(7))
Для вычислений, которые включают полиномы по этому звонку, MuPAD использует арифметику в остаточных классах:
p^3
Однако MuPAD не возвращает коэффициенты как элементы специальной области. Вместо этого это возвращает коэффициенты как простые целые числа типа DOM_INT
:
coeff(p)
delete p:
Чтобы создать следующий полином, объедините входной синтаксис, который использует списки терминов с заданным содействующим звонком:
poly([[9, 3], [4, 1], [-2, 0]], [x], IntMod(7))
MuPAD интерпретирует входные коэффициенты как элементы содействующей области. Например, преобразования, такие как 9 mod 7 = 2 mod 7
происходят на входе. Также можно использовать доменный Dom::IntegerMod
(7)
, чтобы задать эквивалентный полином. Если вы используете IntMod
(7)
, MuPAD использует симметричный функциональный mods
по модулю и представляет коэффициенты числами - 3, …, 3. Если вы используете Dom::IntegerMod
(7)
, MuPAD использует положительный функциональный modp
по модулю и представляет коэффициенты числами 0, …, 6:
poly([[9, 3], [4, 1], [-2, 0]], [x], Dom::IntegerMod(7))
Доменный Dom::IntegerMod
(7)
не позволяет умножение с идентификаторами:
c := Dom::IntegerMod(7)(3)
poly(c*x^2, [x], Dom::IntegerMod(7))
Вместо этого используйте термин список, чтобы задать полином:
poly([[c, 2]], [x], Dom::IntegerMod(7))
delete c:
Измените indeterminates в полиноме:
p:= poly(((a + b)*x - a^2)*x, [x]): p, poly(p, [a, b])
Измените содействующий звонок полинома:
p := poly(-4*x + 5*y - 5, [x, y], IntMod(7)): p, poly(p, IntMod(3))
Создайте полином по содействующему звонку Dom::Float
:
poly(3*x - y, Dom::Float)
y
идентификатора не может появиться в коэффициентах от этого звонка, потому что это не может быть преобразовано в число с плавающей запятой:
poly(3*x - y, [x], Dom::Float)
Можно перегрузить poly
его первым операндом. Например, создайте доменный polyInX
, который представляет полиномы в x
:
domain polyInX new := () -> new(dom, poly(args(), [x])); print := p -> expr(extop(p, 1)); poly := p -> if args(0) = 1 then print(Unquoted, "polyInX::poly called with 1 argument"); extop(p, 1); else print(Unquoted, "polyInX::poly called with more than 1 argument"); poly(extop(p, 1), args(2..args(0))); end; end_domain: p := polyInX(3*x^2-2)
Можно преобразовать элементы polyInX
в полиномы типа DOM_POLY
. Вызовы функции poly
метод poly
области:
poly(p)
polyInX::poly called with 1 argument
Путем реакции на дополнительные аргументы перегрузка, заданная выше также, позволяет вам создавать полиномы по другим содействующим звонкам:
poly(p, [x], IntMod(2))
polyInX::poly called with more than 1 argument
Создайте полином с коэффициентами, содержащими идентификатор y
. Несмотря на то, что вы присваиваете значение 1 y
, MuPAD не заменяет новым значением в полином:
f := poly(x^2 - y, [x]): y := 1: eval(f)
Можно оценить коэффициенты явным образом. Используйте функцию mapcoeffs
, чтобы применить eval
к коэффициентам полинома:
f := mapcoeffs(f, eval)
| |
|
indeterminates полинома: обычно, идентификаторы или индексированные идентификаторы. |
|
Содействующий звонок: или |
|
Полином типа |
|
Список, содержащий коэффициенты и экспоненты |
|
Список, содержащий коэффициенты одномерного полинома |
|
Неопределенный из одномерного полинома |
|
Кольцевой |
|
Кольцевой |
Полином доменного типа DOM_POLY
. Если преобразование в полином не возможно, возвращаемым значением является FAIL
.
f
Чтобы использовать область в качестве коэффициента, область должна содержать следующее:
"zero"
записи, который обеспечивает нейтральный элемент относительно сложения.
"one"
записи, который обеспечивает нейтральный элемент относительно умножения.
"_plus"
метода, который добавляет доменные элементы.
"_negate"
метода, который возвращает инверсию относительно сложения.
"_mult"
метода, который умножает доменные элементы.
"_power"
метода, который вычисляет целочисленные степени доменного элемента. Вызовите этот метод с доменным элементом в качестве первого аргумента и целого числа в качестве второго аргумента.
Кроме того, необходимо задать следующие методы. Функции (такие как gcd
, diff
, divide
, norm
и так далее) вызывают эти методы:
"gcd"
метода, который возвращает наибольший общий делитель доменных элементов.
"diff"
метода, который дифференцирует доменный элемент относительно переменной.
"_divide"
метода, который делит два доменных элемента. Это должно возвратить FAIL
, если деление не возможно.
"norm"
метода, который вычисляет норму доменного элемента и возвращает ее как номер.
"convert"
метода, который преобразовывает выражение в доменный элемент. Метод должен возвратить FAIL
, если такое преобразование не возможно.
Системные вызовы этот метод, чтобы преобразовать коэффициенты многочленных выражений к коэффициентам заданной области. Если этот метод не существует, можно задать коэффициенты только при помощи доменных элементов.
"expr"
метода, который преобразовывает доменный элемент в выражение.
Системная функция expr
вызывает этот метод, чтобы преобразовать полином по содействующей области к многочленному выражению. Если этот метод не существует, expr
вставляет доменные элементы в выражение.
Можно преобразовать полином по определенной содействующей области в полином по той же области, но различный набор indeterminates. Это преобразование намного более эффективно, когда область имеет аксиому Ax::indetElements
. MuPAD неявно принимает, что эта аксиома содержит для доменного IntMod(n)
, но не для Expr
.
Внутренне, MuPAD хранит полиномы типа DOM_POLY
в разреженном представлении и использует целые числа машины для экспонент. Этот метод подразумевает, что в 32-битной среде, экспонента каждой переменной в каждом одночлене не может превысить 231 - 1.
Dom::DistributedPolynomial
| Dom::MultivariatePolynomial
| Dom::Polynomial
| Dom::UnivariatePolynomial