Проверьте опции

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

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

Для многих стандартных процедур MuPAD® можно использовать различные варианты. Если процедура MuPAD принимает опции, она имеет встроенный механизм для сбора и проверки этих опций. Например, функция solve принимает опцию Real. Опция указывает, что решатель должен возвратить только действительные решения и принимает значения TRUE и FALSE. Если опция принимает только TRUE и значения FALSE, можно обеспечить имя опции, не задавая его значение:

solve(x^4 - 1 = 0, x, Real)

Если вы не задаете опцию Real, решатель использует значение опции по умолчанию FALSE и возвращает все сложные решения уравнения:

solve(x^4 - 1 = 0, x)

Можно явным образом задать пару значения опции, например, Real = TRUE или Real = FALSE:

solve(x^4 - 1 = 0, x, Real = TRUE);
solve(x^4 - 1 = 0, x, Real = FALSE)

Если вы предоставляете неожиданную возможность (например, если вы записываете имя опции неправильно), MuPAD выдает ошибку, указывая на неправильную опцию. Если существует несколько неправильных опций, MuPAD указывает на первую неправильную опцию:

solve(x^4 - 1 = 0, x, Rea, Rel)
Error: Invalid argument number 3.
  Evaluating: solvelib::getOptions

Можно встроить ту же опцию, проверяющую механизм в собственные процедуры. Для этой задачи MuPAD обеспечивает функцию prog::getOptions, которая собирает и проверяет опции, используемые во время вызова процедуры. Когда пользователь вызывает вашу процедуру, prog::getOptions сканирует все аргументы и возвращает таблицу, которая содержит все ожидаемые опции и их значения. Это также возвращает список всех неожиданных опций.

Когда вы передадите аргументы prog::getOptions, всегда используйте следующий заказ. Первый аргумент prog::getOptions является номером   n + 1, где n является количеством необходимых (обязательных) аргументов процедуры. Затем необходимо предоставить список всех действительных аргументов, сопровождаемых таблицей всех приемлемых опций и их значений по умолчанию. Чтобы получить доступ к последовательности всех аргументов вызова процедуры, включая обязательные аргументы и опции, используют функцию args.

Следующий пример демонстрирует процедуру, которая принимает числовые коэффициенты a, b и c и решает квадратное уравнение a x2 + bx + c = 0 использований этих коэффициентов. Процедура solveQuadraticEqn требует, чтобы пользователь обеспечил три числовых значения. Поэтому, если вы встраиваете prog::getOptions в эту процедуру, первый параметр prog::getOptions должен быть номером 4. Процедура также принимает дополнительный аргумент PositiveOnly. Если значением PositiveOnly является TRUE, процедура возвращает только положительные решения квадратного уравнения. Если значением является FALSE, процедура возвращает все решения. Следующий вызов функции к prog::getOptions устанавливает значение опции по умолчанию PositiveOnly = FALSE:

solveQuadraticEqn := proc(a:Type::Numeric, b:Type::Numeric,
                                           c:Type::Numeric)
local options, S;
begin
  options := prog::getOptions(4, [args()],
             table(PositiveOnly = FALSE));
  S := solve(a*x^2 + b*x + c = 0, x);
  if options[1][PositiveOnly] = TRUE then
    S := select(S, testtype, Type::Positive)
  end_if:
  return(S)
end_proc:

Если вы вызываете solveQuadraticEqn без опции PositiveOnly, процедура возвращает все решения квадратного уравнения:

solveQuadraticEqn(2, 3, -9)

Если вы используете опцию PositiveOnly, процедура возвращает только положительные решения:

solveQuadraticEqn(2, 3, -9, PositiveOnly)

По умолчанию prog::getOptions не делает ошибки, когда это находит неожиданную опцию (опция, которая не перечислена в таблице из принятых опций). Вместо этого это собирает все неожиданные опции и возвращает их в отдельном списке. Таким образом, процедура, solveQuadraticEqn не выдает ошибку, когда вы записываете имя опции неправильно:

solveQuadraticEqn(2, 3, -9, Positive)

Функция prog::getOptions может выдать ошибку, когда она находит неожиданную опцию. В вызове функции к prog::getOptions четвертый аргумент указывает, должен ли prog::getOptions тихо собрать неожиданные опции или выдать ошибку. Этот аргумент является дополнительным. По умолчанию это установлено в FALSE. Чтобы выдать ошибку вместо того, чтобы перечислить неожиданные аргументы, используйте TRUE в качестве четвертого аргумента prog::getOptions:

solveQuadraticEqn := proc(a:Type::Numeric, b:Type::Numeric,
                                           c:Type::Numeric)
local options, S;
begin
  options := prog::getOptions(4, [args()],
       table(PositiveOnly = FALSE), TRUE);
  S := solve(a*x^2 + b*x + c = 0, x);
  if options[1][PositiveOnly] = TRUE then
    S := select(S, testtype, Type::Positive)
  end_if:
  return(S)
end_proc:

Теперь, процедура solveQuadraticEqn выдает ошибку. Сообщение об ошибке указывает на неправильную опцию:

solveQuadraticEqn(2, 3, -9, Positive)
Error: Invalid argument number 4.
  Evaluating: solveQuadraticEqn