Factored

Объекты сохранены в учтенной форме

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

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

Синтаксис

Factored(list, <type>, <ring>)
Factored(f, <type>, <ring>)

Описание

Factored является областью объектов, сохраненных в учтенной форме, таких как главная факторизация целых чисел, факторизация без квадратов полиномов или факторизация полиномов в неприводимых факторах.

Аргумент list должен быть списком нечетной длины и формы [u, f1, e1, f2, e2, ..., fr, er], где записи u и f i является элементами доменного ring или может быть преобразован в такие элементы. i e должен быть целыми числами. Здесь, i колеблется от 1 до r.

Смотрите раздел “Operands” ниже для значения записей того списка.

О сообщении об ошибке сообщают, если одна из записей списка имеет неправильный тип.

Арифметическое выражение f, данный как первый аргумент, совпадает с предоставлением списка [ring::one, f, 1].

Смотрите раздел “Operands” ниже для значения записей того списка.

f должен быть элементом доменного ring или должен быть конвертируем в такой элемент, в противном случае сообщение об ошибке было бы дано.

Аргумент type указывает на то, что известно о факторизации. В настоящее время следующие типы известны:

  • "unknown" – ничто не известно о факторизации.

  • "irreducible"i f неприводим по доменному ring.

  • "squarefree"i f без квадратов по доменному ring.

Если этот аргумент отсутствует, то тип созданного учтенного объекта установлен в "unknown".

Тип факторизации известен любому элементу Factored. Используйте методы "getType" и "setType" (см. ниже) считать и установить тип факторизации данного учтенного объекта.

Аргумент ring является звонком факторизации. Это должна быть интегральная область, т.е. область категории Cat::IntegralDomain.

Если этот аргумент отсутствует, то доменный Dom::ExpressionField() используется.

Звонок факторизации известен любому элементу Factored. Используйте методы "getRing" и "setRing" (см. ниже) считать и установить звонок факторизации данного учтенного объекта.

Можно использовать индексный оператор [ ], чтобы извлечь факторы элемента f доменного Factored. Например, для f = u f1e1f2e2  …, у вас есть f   [1] = u, f   [2] = f 1e1, f   [3] = f 2e2 и т.д.

Можно также использовать методы "factors" и "exponents" (см. ниже) чтобы получить доступ к операндам, т.е. вызову, Factored::factors(f) возвращает список факторов f i, и Factored::exponents(g) возвращает список экспонент e i (1 ≤ ir).

Системные функции ifactor, factor и polylib::sqrfree являются главным приложением этой области, они возвращают свой результат в форме таких учтенных объектов (см. их страницы справки для получения информации о типе и звонке факторизации).

Не может быть никакой потребности явным образом создать учтенные объекты, но работать с результатами упомянутых системных функций.

Обратите внимание на то, что элемент Factored распечатан как выражение и ведет себя как этот. Как пример, результатом f := factor(x^2 + 2*x + 1) является элемент Factored и распечатанный как (x + 1)^2. Вызов type(f) возвращает "_power" как тип выражения f.

Для элемента f Factored вызов Factored::convert(f, DOM_LIST) дает список всех операндов f.

Примеры

Пример 1

Следующее вычисляет главную факторизацию целого числа 20:

f := ifactor(20)

Результатом является элемент доменного Factored:

domtype(f)

который состоит из следующих пяти операндов:

op(f)

Они представляют целое число 20 в следующей форме: 20 = 1 22 5. Факторы являются простыми числами и могут быть извлечены через Factor::factors:

Factored::factors(f)

ifactor хранил информацию, что звонок факторизации является звонком целых чисел (представленный доменным Dom::Integer), и что факторы f являются главными (и поэтому неприводимыми, потому что является интегральной областью):

Factored::getRing(f), Factored::getType(f)

Мы можем преобразовать такой объект в различные формы, такой как в список его операндов:

Factored::convert_to(f, DOM_LIST)

или в неоцененное выражение, сохраняя учтенную форму:

Factored::convert_to(f, DOM_EXPR)

или назад в целое число:

Factored::convert_to(f, Dom::Integer)

Можно также использовать системную функцию coerce здесь, который имеет тот же эффект.

Пример 2

Мы вычисляем факторизацию целых чисел 108 и 512:

n1 := ifactor(108); n2 := ifactor(512)

Умножение этих двух целых чисел дает главную факторизацию 55 296 = 108 512:

n1*n2

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

n1 + n2

Можно применить функциональный ifactor к результату, если вы интересуетесь его главной факторизацией:

ifactor(%)

Вы применение (почти) каждой функции к учтенным объектам, функции, которые в основном ожидают арифметические выражения как их вход. Обратите внимание на то, что, прежде чем операция применяется, учтенный объект преобразован в арифметическое выражение в неучтенной форме:

Re(n1)

Пример 3

Второй системной функцией, которая имеет дело с элементами Factored, является factor, который вычисляет все неприводимые факторы полинома.

Например, если мы задаем следующий полином 101:

p := poly(x^12 + x + 1, [x], Dom::IntegerMod(101)):

и вычислите его факторизацию в неприводимые факторы, мы добираемся:

f := factor(p)

Если мы умножаем учтенный объект с элементом, который может быть преобразован в элемент звонка факторизации, то мы получаем новый учтенный объект, который затем имеет тип факторизации "unknown":

x*f

Factored::getType(%)

Можно использовать функциональный expand, который возвращает учтенный объект в расширенной форме как элемент звонка факторизации:

expand(f)

Пример 4

Третьей системной функцией, которые возвращают элементы Factored, является polylib::sqrfree, который вычисляет факторизацию без квадратов полиномов. Например:

f := polylib::sqrfree(x^2 + 2*x + 1)

Типом факторизации, конечно, является "squarefree":

Factored::getType(f)

Параметры

list

Список нечетной длины

f

Арифметическое выражение

type

Строка (значение по умолчанию: "unknown")

ring

Область категории Cat::IntegralDomain (значение по умолчанию: Dom::ExpressionField())

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

При вызове учтенного объекта, когда функция приводит к самому объекту, независимо от аргументов. Аргументы не оценены.

Операции

Можно применить (почти) каждую функцию к учтенным объектам, функции, которые в основном ожидают арифметические выражения как их вход.

Например, можно добавить или умножить те объекты или применить функции, такие как expand и diff им. Но результат такой операции затем не имеет обычно больше доменного Factored, когда учтенная форма могла быть потеряна из-за операции (см. примеры ниже).

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

coerce(f, DOM_LIST) вызова возвращает список операндов учтенного объекта f (см. метод "convert_to" ниже).

Операнды

Элемент f Factored состоит из r + 1 операнд u, f 1, e 1, f 2, e 2, …, f r, e r, такой что f = u f1e1f2e2  …  f r e r.

Первый операнд u и факторы f i является элементами доменного ring. Экспоненты e i являются целыми числами.

Методы

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

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

_mult(f, g, …)

Предположим, что g является элементом доменного ring (или может быть преобразован в такой элемент).

Если g является модулем ring или фактором f, то результатом является учтенный объект того же типа факторизации как f. В противном случае результатом является элемент Factored с типом факторизации "unknown".

Если и f и g учтены, объекты с факторизацией вводят "irreducible", то результатом является снова учтенный объект этого типа, т.е. результат находится все еще в учтенной форме.

В противном случае учтенная форма f потеряна, и результатом этого метода является элемент ring.

Этот метод перегружает функциональный _mult для учтенных объектов, т.е. можно использовать его в форме f*g*..., или в функциональном обозначении: _mult(f, g, ...).

_power(f, n)

Если n является положительным целым числом и f, учтенный объект с факторизацией вводит "irreducible" или "squarefree", то результатом является все еще учтенный объект этого типа.

В противном случае учтенная форма f потеряна, и результатом этого метода является элемент ring.

Этот метод перегружает функциональный _power для учтенных объектов, т.е. можно использовать его в форме f^n, или в функциональном обозначении: _power(f, n).

expand(f)

exponents(f)

factor(f)

Если f уже имеет тип факторизации "irreducible", то этот метод только возвращает f.

В противном случае этот метод преобразовывает f в элемент доменного ring и вызывает метод "factor" ring.

Этот метод возвращает учтенный объект доменного Factored с типом факторизации "irreducible", если факторизация f может быть вычислена (в противном случае, FAIL возвращен).

Этот метод перегружает функциональный factor для учтенных объектов, т.е. можно использовать его в форме factor(f).

factors(f)

irreducible(f)

Тест на неприводимом тривиален, если f имеет тип факторизации "irreducible".

В противном случае этот метод преобразовывает f в элемент ring и вызывает метод "irreducible" ring. FAIL значения возвращен, если доменный ring не может протестировать, если f неприводим.

iszero(f)

Этот метод перегружает функциональный iszero для учтенных объектов, т.е. можно использовать его в форме iszero(f).

sqrfree(f)

Если f уже имеет тип факторизации "squarefree", то этот метод только возвращает f.

В противном случае этот метод преобразовывает f в элемент доменного ring и вызывает метод "squarefree" ring.

Этот метод возвращает учтенный объект доменного Factored с типом факторизации "squarefree", если факторизация без квадратов f может быть вычислена (в противном случае, FAIL возвращен).

Этот метод перегружает функциональный polylib::sqrfree для учтенных объектов, т.е. можно использовать его в форме polylib::sqrfree(f).

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

_index(f, i)

Отвечает сообщением об ошибке, если i больше, чем количество условий f.

Этот метод перегружает индексный оператор [ ] для учтенных объектов, т.е. можно использовать его в форме f[i].

getRing(f)

getType(f)

has(f, x, …)

Этот метод перегружает функциональный has для учтенных объектов, т.е. можно использовать его в форме has(f, x, ...).

map(f, func, …)

Смотрите системную функцию map для деталей.

Этот метод перегружает функциональный map для учтенных объектов, т.е. можно использовать его в форме map(f, func, ...).

nops(f)

Этот метод перегружает функциональный nops для учтенных объектов, т.е. можно использовать его в форме nops(f).

op(f, i)

Возвращает FAIL, если i больше, чем количество операндов f.

Этот метод перегружает функциональный op для учтенных объектов, т.е. можно использовать его в форме op(f, i).

select(f, func, …)

Этот метод перегружает функциональный select для учтенных объектов, т.е. можно использовать его в форме select(f, func, ...).

set_index(f, i, x)

Отвечает сообщением об ошибке, если i больше, чем количество условий f.

Примечание

Убедитесь, что x или является элементом доменного ring или целым числом.

Этот метод перегружает индексный оператор [ ] для учтенных объектов, т.е. можно использовать его в форме f[i] := x.

setRing(f, ring)

Примечание

Используйте этот метод с осторожностью! Убедитесь, что факторизация f все еще допустима по новому звонку, и что операнды f имеют правильный доменный тип.

ring должен быть областью категории Cat::IntegralDomain, который не проверяется этим методом.

setType(f, type)

Примечание

Используйте этот метод с осторожностью! Убедитесь, что тип факторизации соответствует факторизации f.

subs(f, x = a, …)

Этот метод перегружает функциональный subs для учтенных объектов, т.е. можно использовать его в форме subs(f, x = a, ...).

subsop(f, i = a, …)

Этот метод перегружает функциональный subsop для учтенных объектов, т.е. можно использовать его в форме subsop(f, i = a, ...).

type(f)

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

convert(x)

Если преобразование перестало работать, то FAIL возвращен.

x может или быть списком формы [u, f1, e1, ..., fr, er] нечетной длины (где u, f1, ..., fr имеет доменный тип ring или может быть преобразован в такие элементы, и e1, ..., er является целыми числами), или элемент, который может быть преобразован в доменный ring. Последний случай соответствует списку [ring::one,x,1].

convert_to(f, T)

Если преобразование перестало работать, то FAIL возвращен.

Если T является доменный DOM_LIST, то список операндов f возвращен.

Если T является доменный DOM_EXPR, то неоцененное выражение, u*f1^e1*f2^e2*...*fr^er возвращен, где u, f1, e1, ... операнды f.

В противном случае, метод, которым "convert" доменного T называется, чтобы преобразовать f в элемент доменного T (который мог возвратить FAIL).

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

create(list)

create(x)

Этот метод создает новый учтенный объект с операндами ring::one, x, 1.

expr(f)

Примечание

Обратите внимание на то, что учтенная форма f может быть потеряна из-за этого преобразования.

expr2text(f)

testtype(f, T)

Этот метод называется от системной функции testtype.

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

_concat(f, g)

f и g должны иметь тот же тип факторизации и звонок факторизации, в противном случае сообщение об ошибке дано.

maprec(f, x, …)

Первый f преобразован в неоцененное выражение u*f1^e1*f2^e2*...*fr^er, где u, f1, e1, ... является операндами f. Затем функциональный misc::maprec вызван этим выражением как свой первый параметр.

Обратите внимание на то, что результат этого метода не более длинен объект Factored!

print(f)

unapply(f, <x>)

Этот метод перегружает функциональный fp::unapply для учтенных объектов, т.е. можно использовать его в форме fp::unapply(f). Смотрите fp::unapply для деталей.