Преобразование типов данных

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

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

При создании новых объектов в MuPAD® лучшая практика состоит в том, чтобы рассмотреть, какой области объект должен принадлежать. Выбор правильного типа данных с начала помогает вам избежать ненужных преобразований. Тем не менее, некоторые задачи вычисления требуют преобразований типов данных. Для таких задач MuPAD позволяет вам преобразовать элементы некоторых областей к элементам других областей.

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

  • Используйте принуждать Функцию. Вызовите функцию coerce, чтобы преобразовать объект в элемент заданной области. Функция coerce может вызвать convert, convert_to и методы области coerce. Если преобразование не возможно или если ни один из этих методов не реализован для областей, участвующих в преобразовании, функция coerce возвращает FAIL.

  • Используйте Функцию expr. Вызовите функцию expr, чтобы преобразовать объект в элемент основной области. Вызовы функции expr метод expr. Если преобразование не возможно или если метод expr не реализован для заданных областей, функция expr возвращает FAIL.

  • Используйте Конструкторов. Вызовите доменного конструктора области, в которую вы хотите преобразовать объект. Этот подход обычно работает, но он может перестать работать в некоторых случаях.

  • Вызов методов преобразования области непосредственно. Чтобы использовать этот подход, необходимо знать, какие методы преобразования реализованы для участвующих областей. Эта альтернатива не рекомендуется. Используйте coerce или функцию expr вместо этого.

Примечание

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

Используйте принуждать Функцию

Чтобы преобразовать объект MuPAD в элемент заданной области, используйте функцию coerce. Например, преобразуйте следующий элемент доменного DOM_LIST к элементу доменного DOM_SET:

L := [1, 2, 3, 4, 5, 6];
S := coerce(L, DOM_SET)

domtype(L), domtype(S)

Результаты преобразования могут зависеть от исходного доменного типа. Например, создайте массив и матрицу с тем же числом элементов и равняйтесь размерностям:

M := matrix(2, 3, [1, 2, 3, 4, 5, 6]);
A := array(1..2, 1..3, [1, 2, 3, 4, 5, 6])

Проверьте, что матричный M принадлежит доменному Dom::Matrix() и массиву, A принадлежит доменному DOM_ARRAY:

domtype(M), domtype(A)

Используйте функцию coerce, чтобы преобразовать оба объекта в элементы доменного DOM_LIST. Функция coerce преобразовывает матричный M во вложенный список, где внутренние списки представляют строки исходной матрицы. В то же время coerce преобразовывает массив A в плоский список:

LM := coerce(M, DOM_LIST);
LA := coerce(A, DOM_LIST)

Оба новых объекта принадлежат основной области списков DOM_LIST:

domtype(LM), domtype(LA)

Для дальнейших вычислений удалите идентификаторы L, S, M, A, LM и LA:

delete L, S, M, A, LM, LA

Используйте Функцию expr

Чтобы преобразовать элемент области библиотеки к элементу области простого ядра, используйте функцию expr. Эта функция не позволяет вам выбирать основную область, в которую она преобразовывает объект. Если преобразование в основные области не возможно, функция возвращает FAIL.

Функция expr пытается найти самую простую основную область, в которую она может преобразовать данный объект. Функция также может преобразовать элемент более сложной основной области к более простой основной области. Например, это преобразовывает полином, представленный одной переменной x идентификатору x:

y := poly(x);
expr(y)

Исходный объект y принадлежит области полиномов. Результат преобразования принадлежит области идентификаторов DOM_IDENT:

domtype(y), domtype(expr(y))

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

p := poly(x^2 + x + 2);
expr(p)

Снова, исходный полином принадлежит области полиномов. На этот раз результат преобразования принадлежит области выражений:

domtype(p), domtype(expr(p))

MuPAD может применить функцию expr к объекту рекурсивно. Если объект содержит условия, которые принадлежат областям библиотеки или усложнили основные области, expr также пытается преобразовать те элементы условий более простых основных областей. Например, если полиномиальный p является элементом списка, применение функции expr к списку преобразовывает полиномиальный p в выражение:

matrix(2, 2, [p, 0, 0, 1]);
expr(matrix(2, 2, [p, 0, 0, 1]))

Функция expr преобразовывает матрицу области библиотеки Dom::Matrix() к массиву области простого ядра DOM_ARRAY:

M := matrix(2, 3, [1, 2, 3, 4, 5, 6])

domtype(M), domtype(expr(M))

Функция expr преобразовывает элемент серийной области к выражению основного доменного DOM_EXPR. Как правило, порядок условий в получившихся изменениях выражения:

s := series(exp(x), x);
expr(s)

domtype(s), domtype(expr(s))

Для дальнейших вычислений удалите идентификаторы y, p, M и s:

delete y, p, M, s

Используйте конструкторов

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

Вызов конструктора необходимой области часто является самым простым способом преобразовать объект в элемент той области. Предположим, что вы хотите преобразовать следующий список L в матрицу:

L := [1, 2, 3, 4, 5, 6]

Чтобы преобразовать список в матрицу, вызовите матричного конструктора matrix. Используйте аргументы матричного конструктора, чтобы задать размерности необходимой матрицы и списка L элементов матрицы. Полученный объект 2×3 матрица доменного Dom::Matrix():

matrix(2, 3, L);
domtype(%)

Также можно преобразовать список в матрицу при помощи Dom::Matrix():

Dom::Matrix()(2, 3, L);
domtype(%)

Для дальнейших вычислений удалите идентификатор L:

delete L