Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
Функция prog::test
является основным инструментом тестирования в MuPAD®. Эта функция сравнивает фактический результат вычислений с ожидаемым результатом, который вы задаете. Например, создайте процедуру f
:
f := proc(a:Type::Numeric, b:Type::Numeric) begin if a = b or a > b then return(a) else return(b) end_if end_proc:
Чтобы протестировать процедуру, используйте функцию prog::test
. Если тест не показывает проблем, prog::test
возвращает пустой объект null()
и ничего не распечатывает:
prog::test(f(I, I), I)
Если вызов процедуры, протестированный ошибками prog::test
или если фактические результаты отличаются от ожидаемых результатов, prog::test
, распечатывает информацию о выполнении теста. Например, если ваш тест сравнивает два различных комплексных числа, prog::test
возвращает следующее сообщение:
prog::test(f(2*I, I), I)
Error in test 2
Input: f(2*I, I)
Expected: I
Got: TrapError = [1003, message("symbolic:kernel:NotBoolean")]
Near line: 1
Если ошибка ожидается, можно переписать тест с помощью опции TrapError
:
prog::test(f(2*I, I), TrapError = 1003)
Когда вы вызываете prog::test
, MuPAD оценивает фактический и ожидаемые результаты прежде, чем сравнить их:
prog::test(f(x^2 | x = 2, 5), 2*2)
Error in test 4
Input: f(x^2 | x = 2, 5)
Expected: 4
Got: 5
Near line: 1
Оценка фактических и ожидаемых результатов может занять много времени. Чтобы избежать долгих оценок, функция prog::test
позволяет вам задать ограничение по времени для оценки теста. Чтобы ограничить время оценки для конкретного теста, используйте опцию Timeout
функции prog::test
. Например, установите ограничение по времени 2 секундам:
prog::test(f([i! $ i = 1..1000000], [i! $ i = 1..1000000]), [i! $ i = 1..1000000], Timeout = 2)
Error in test interactive 5
Input: f([i! $ i = 1..100000], [i! $ i = 1..100001])
Expected: FAIL
Got: TrapError = [1320, "Error: Execution time exceeded"]
Timeout: 2.0 (5.106*prog::ntime())
В этом примере измерение ограничения по времени зависит от вашей аппаратной конфигурации. Протокол испытаний также показывает аппаратно-независимое время с точки зрения функции prog::ntime
.
По умолчанию prog::test
тестирует строгое равенство между фактическим и ожидаемыми результатами. Тестирование равенства значений с плавающей точкой может сбить с толку, когда точность отображения отличается от внутренней точности. В этом случае различные числа с плавающей запятой могут выглядеть идентичными. Таким образом, со значениями по умолчанию DIGITS
и Pref::outputDigits
, приближение с плавающей точкой 1/3 и номера 0.3333333333 выглядит идентичным:
prog::test(float(1/3), 0.3333333333)
Error in test 5
Input: float(1/3)
Expected: 0.3333333333
Got: 0.3333333333
Near line: 1
Внутренне, MuPAD использует больше чем 10 цифр, чтобы аппроксимировать 1/3 с числом с плавающей запятой. Система добавляет защитные цифры для увеличенной точности. Чтобы видеть, как много защитных цифр системное использование, увеличьте число выходных цифр с помощью функции Pref::outputDigits
. Затем протестируйте равенство чисел снова:
Pref::outputDigits(20): prog::test(float(1/3), 0.3333333333)
Error in test 6
Input: float(1/3)
Expected: 0.3333333333
Got: 0.33333333333333333304
Near line: 2
Когда вы тестируете равенство чисел с плавающей запятой, может быть полезно протестировать аппроксимированное равенство. Аппроксимированным оператором равенства в MuPAD является ~=
. Соответствующей функцией является _approx
. Функция prog::test
позволяет вам выбрать метод для сравнения фактического и ожидаемые результаты. Например, 1/3 приблизительно равен 0,3333333333 в точности с 10 цифрами по умолчанию:
prog::test(float(1/3), 0.3333333333, Method= `~=`)
Кроме того, использование опции Method
позволяет вам задать больше чем одно приемлемое решение. Например, если вы случайным образом выбираете одно решение следующего уравнения, можно получить любое из его четырех допустимых решений:
i := random(1..4): prog::test(solve(x^4 - 16 = 0, x)[i()], {-2, 2, -2*I, 2*I}, Method= _in)
Для дальнейших вычислений восстановите выходную точность по умолчанию:
Pref::outputDigits(UseDigits):