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.

Примеры

Пример 1

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))

Пример 2

Булевы операторы and, or, not не оценивайте уравнения и неравенства логически, и возвращайте символьное Булево выражение. Булева оценка и упрощение осуществляются bool:

a = a and 3 < 4

bool(a = a and 3 < 4)

Пример 3

bool обрабатывает специальный булев постоянный UNKNOWN:

bool(UNKNOWN and 1 < 2), bool(UNKNOWN or 1 < 2),
bool(UNKNOWN and 1 > 2), bool(UNKNOWN or 1 > 2)

Пример 4

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:

Пример 5

Нет никакой потребности использовать 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:

Пример 6

Обратите внимание на то, что 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

Пример 7

Выражения, включающие символьные булевы подвыражения, не могут быть обработаны bool. Однако simplify с опцией logic может использоваться в упрощении:

(b1 and b2) or (b1 and (not b2)) and (1 < 2)

simplify(%, logic)

Параметры

b

Булево выражение

Возвращаемые значения

TRUEложь, или UNKNOWN.

Перегруженный

b

Смотрите также

Функции MuPAD