Блокноты 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()