Задайте свои собственные типы данных

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

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

MuPAD® обеспечивает много предопределенных областей для большого разнообразия символьных и числовых вычислений. Система также расширяема. Если предопределенные области MuPAD не удовлетворяют ваши потребности, можно создать операции own domains и define на их элементах. Кроме того, MuPAD позволяет вам изменять существующие области библиотеки, несмотря на то, что этот подход не рекомендуется. Чтобы создать новую область, используйте функцию newDomain. Например, создайте доменный TempF, который представляет шкалу Температуры по Фаренгейту:

TempF := newDomain("TempF"):

В настоящее время новая область не имеет никаких элементов. Чтобы создать элемент области, используйте функцию new. Например, создайте новый элемент x доменного TempF:

x := new(TempF, 15)

Чтобы проверить, что объект x принадлежит доменному TempF, используйте функцию testtype. Можно также использовать функция type или domtype:

testtype(x, TempF), domtype(x), type(x)

Чтобы проверять внутреннее представление x, используйте функцию extop:

extop(x)

Предположим, что вы хотите, чтобы метод new доменного TempF проверял, является ли входной параметр допустимым измерением температуры. В этом случае переопределите метод new для своего доменного TempF:

TempF::new := t -> if testtype(t, Type::Real) then
           if t >= -459.67 then
             new(dom, t);
           else
             error("Temperature is below absolute zero.");
           end_if;
         else
           error("Expecting a real number above absolute zero.");
         end_if:

Переопределенный метод проверяет, что входной параметр является номером. Это также проверяет, что обеспеченная температура не ниже абсолютного нуля. Абсолютный нуль является нулевыми степенями в шкале температуры Келвина, которая эквивалентна-459.67 градусам по шкале Фаренгейта. Переопределенный метод создает новые элементы в градусах Фаренгейт. Вызовите метод TempF::new непосредственно или используйте более короткий синтаксис TempF(newElement):

TempF::new(0), TempF(32)

Метод TempF::new также гарантирует, что все новые элементы представляют допустимые температуры:

TempF(-500)
Error: Temperature is below absolute zero. [TempF::new]

Метод TempF::new требует, чтобы новые элементы были вещественными числами:

TempF(x + 2)
Error: Expecting a real number above absolute zero. [TempF::new]
TempF(1 + 2*I)
Error: Expecting a real number above absolute zero. [TempF::new]

Как следующий шаг, улучшите выходной формат для элементов вашей новой области. Чтобы изменить формат что использование MuPAD для отображения элементов области, переопределите метод print для той области. Например, при отображении элементов доменного TempF::new, покажите измерения температуры, сопровождаемые модулями измерений (градусы по Фаренгейту):

TempF::print := proc(TempF)
begin
  expr2text(extop(TempF, 1)).Symbol::deg."F"
end_proc:

Теперь, MuPAD отображает элементы доменного TempF::new можно следующим образом:

TempF(32), TempF(72), TempF(90), TempF(104.8)

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

TempF(75) + TempF(10)

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

TempF::_plus := proc()
local elements;
begin
  elements:= map([args()], op, 1);
  new(TempF, _plus(op(elements)))
end_proc:

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

TempF(75) + TempF(10)

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

delete x