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

Блокноты 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 функция. Можно также использовать domtype или type функция:

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