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
норма
и так далее), вызывают эти методы:
Метод "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