bool
Булева оценка
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.
Для булевских переменных в MATLAB® смотрите logical
.
bool(b
)
bool(b)
выполняет Булево выражение b
.
Функциональный bool
подачи для сокращения Булевых выражений к одной из булевых констант TRUE
ложь
, или UNKNOWN
.
Булевы выражения являются выражениями, которые состоят из равенств, неравенства, elementhood отношения и эти константы, объединили через логические операторы and
, or
, not
.
Функциональный bool
оценивает все равенства и неравенства в Булевом выражении к любому TRUE
или FALSE
. Получившаяся логическая комбинация булевых констант уменьшается согласно правилам MuPAD® логика с тремя состояниями (см. and
, or
, not
).
Уравнения x = y
и неравенства x <> y
оценены синтаксически bool
. Это не тестирует равенство ни в каком математическом смысле.
Неравенства x < y
, x <= y
и т.д. может быть оценен bool
если и только если x
и y
вещественные числа типа Type::Real
. В противном случае ошибка происходит.
bool
оценивает все подвыражения Булевого выражения прежде, чем упростить результат. Функции _lazy_and
, _lazy_or
обеспечьте альтернативу: “ленивая булева оценка”.
Нет никакой потребности использовать bool
в условной части if
повторение
, и while
операторы. Внутренне, эти операторы осуществляют булеву оценку _lazy_and
и _lazy_or
. См. пример 5.
Используйте simplify
с опцией logic
упростить выражения, включающие символьные булевы подвыражения. См. Пример 7.
bool
является сверхзагружаемым не только для областей, но также и для функциональных сред. Это означает это, если f
оценивает к функциональной среде, затем bool(f(x1, …, xn))
возвращает f::bool( x1, …, xn )
, или ошибка, если никакой паз f::bool
\exists.
Вызов bool(x ~= y)
подачи для сравнения численных значений x
и y
. Если оба x
и y
может быть преобразован в ненулевые действительные или комплексные числа с плавающей запятой, это проверяется ли float((x - y)/x)| < 10^(-DIGITS)
удовлетворен. Таким образом, TRUE
возвращен если x
и y
совпадите в относительной числовой точности, установленной DIGITS
. Для x = 0
, критерием является |float(y)| < 10^(-DIGITS)
. Для y = 0
, критерием является |float(x)| < 10^(-DIGITS)
. Если любой x
или y
содержит символьный объект, который не может быть преобразован в действительное или комплексное число с плавающей точкой, функциональный bool
возвращает значение UNKNOWN
.
MuPAD понимает, что 1 меньше 2:
1 < 2 = bool(1 < 2)
Обратите внимание на то, что bool
может не сравнить вещественные числа, выраженные символически:
bool(sqrt(14) <= sqrt(2)*sqrt(7))
Error: Unable to evaluate to Boolean. [_leequal]
Можно сравнить приближения с плавающей точкой. В качестве альтернативы можно использовать is
:
bool(float(sqrt(14)) <= float(sqrt(2)*sqrt(7))), is(sqrt(14) <= sqrt(2)*sqrt(7))
Булевы операторы and
, or
, not
не оценивайте уравнения и неравенства логически, и возвращайте символьное Булево выражение. Булева оценка и упрощение осуществляются bool
:
a = a and 3 < 4
bool(a = a and 3 < 4)
bool
обрабатывает специальный булев постоянный UNKNOWN
:
bool(UNKNOWN and 1 < 2), bool(UNKNOWN or 1 < 2), bool(UNKNOWN and 1 > 2), bool(UNKNOWN or 1 > 2)
bool
должен смочь уменьшать все части составного Булевого выражения к одной из булевых констант. Никакие символьные булевы подвыражения не могут быть включены:
b := b1 and b2 or b3: bool(b)
Error: Unable to evaluate to Boolean. [bool]
b1 := 1 < 2: b2 := x = x: b3 := FALSE: bool(b)
delete b, b1, b2, b3:
Нет никакой потребности использовать bool
явным образом в условных частях if
повторение
, и while
операторы. Обратите внимание, однако, что эти структуры внутренне используют “отложенные вычисления” через _lazy_and
и _lazy_or
вместо “полной булевой оценки” через bool
:
x := 0: if x <> 0 and sin(1/x) = 0 then 1 else 2 end
В отличие от “отложенных вычислений”, bool
оценивает все условия. Следовательно, деление на нуль происходит в оценке sin(1/x) = 0
:
bool(x <> 0 and sin(1/x) = 0)
Error: Division by zero. [_invert]
delete x:
Обратите внимание на то, что bool
не действует рекурсивно. Следующие вызовы полностью отличаются, первый, сравнивающий выражение TRUE = TRUE
и постоянный TRUE
(синтаксически), второй, сравнивающий результат другого bool
- вызовите с TRUE
:
bool((TRUE = TRUE) = TRUE); bool(bool(TRUE = TRUE) = TRUE)
Начиная с if
в то время как
и подобные построения используют ту же булеву оценку внутренне, это также условия эффектов в таких пунктах:
if (is(a < b) = TRUE) or (3 = 3) then YES else NO end; if (is(a < b) or (3 = 3)) = TRUE then YES else NO end
Выражения, включающие символьные булевы подвыражения, не могут быть обработаны bool
. Однако simplify
с опцией logic
может использоваться в упрощении:
(b1 and b2) or (b1 and (not b2)) and (1 < 2)
simplify(%, logic)
|
Булево выражение |
TRUE
ложь
, или UNKNOWN
.
b