Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Как правило, когда процедура MuPAD® сталкивается с ошибкой, вызванной оценкой объекта, процедура останавливается, система возвращается к интерактивному уровню и отображает сообщение об ошибке. Если вы не хотите отключать процедуру, используйте функцию traperror
, чтобы зафиксировать ошибку.
Функция traperror
возвращает код ошибки вместо самой ошибки. Позже, можно воспроизвести ошибку при помощи функции lasterror
. Эта функция производит последнюю ошибку, которая произошла на текущем сеансе MuPAD. Если вы вызываете lasterror
в операторе или процедуре, он отключает тот оператор или процедуру. Если вы хотите отобразить сообщение об ошибке, не выдавая саму ошибку, сохранить код ошибки, возвращенный traperror
, и затем получить сообщение при помощи функции getlasterror
.
Например, функциональный f
выдает ошибку, когда sin (π k) равен нулю:
f := (k) -> 1/sin(PI*k)
f(1)
Error: Division by zero. [_invert] Evaluating: f
Предположим, что вы хотите вычислить f
для значений - π ≤ k ≤ π увеличение значения k
на каждом шаге. Чтобы вызвать функциональный f
для всех необходимых значений, создайте цикл for
. Когда вы пытаетесь выполнить этот оператор, он останавливается, как только функциональный f
сталкивается с делением на нуль впервые. Чтобы постараться не отключать оператор for
, используйте функцию traperror
, чтобы зафиксировать ошибку. Чтобы отобразить текст того сообщения об ошибке, не прерывая выполнение оператора for
, используйте getlasterror
()
:
for k from -1 to 1 step 1/4 do err := traperror(f(k)): if err = 0 then print(Unquoted, "k = ".expr2text(k), "f = ".expr2text(f(k))) else print(Unquoted, "k = ".expr2text(k), getlasterror()) end_if end_for
k = -1, [1025, Error: Division by zero. [_invert]] Evaluating: f
k = -3/4, f = -2^(1/2)
k = -1/2, f = -1
k = -1/4, f = -2^(1/2)
k = 0, [1025, Error: Division by zero. [_invert]] Evaluating: f
k = 1/4, f = 2^(1/2)
k = 1/2, f = 1
k = 3/4, f = 2^(1/2)
k = 1, [1025, Error: Division by zero. [_invert]] Evaluating: f
Для ошибок, созданных с функцией error
, включая ваши пользовательские сообщения об ошибке, traperror
всегда возвращает код ошибки 1028. Если сообщение об ошибке с кодом 1028 является последним сообщением об ошибке, которое произошло на сеансе MuPAD, можно получить то сообщение об ошибке при помощи lasterror
или getlasterror
. Например, создайте процедуру g
, который вычисляет факториал любого номера меньше чем 10. Если вы передаете номер, больше, чем 10 к этой процедуре, процедура сокращает количество к 10, и затем вычисляет факториал:
g := proc(n:Type::PosInt) local test; begin test := proc() begin if n > 10 then error("The number must not exceed 10.") end_if end_proc: if traperror(test(n)) <> 0 then g(n - 1) else n! end_if; end_proc:
Вызовите процедуру с номером 100. В течение времени выполнения процедура сталкивается с ошибкой, но не останавливается. Это также не отображает сообщение об ошибке. Вместо этого это возвращает результат:
g(100)
Чтобы получить и отобразить сообщение об ошибке, отловленное во время осуществления процедуры g
, используйте функцию lasterror
:
lasterror()
Error: The number must not exceed 10. [test]
Чтобы отобразить код ошибки и текст того сообщения, используйте функцию getlasterror
:
g(100): getlasterror()