is

Проверяйте математическое свойство выражения

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

is(cond)
is(ex, set)

Описание

is(cond) проверки, ли условие cond содержит для всех возможных значений.

is(ex, set) проверки, ли выражение ex находится в наборе set.

Механизм свойства помогает упростить выражения включающие выражения, которые несут “математические свойства”. Функциональный assume позволяет принимать “предположения”, такие как 'x вещественное число' или 'x нечетное целое число' к идентификатору x, сказать. Арифметические выражения, включающие x может наследовать такие свойства. Например, '1 + x^2 положительно' если 'x вещественное число'. Функциональный is основной инструмент для запроса математических свойств.

is запрашивает предположения обо всех включенных идентификаторах и проверках ли условие cond содержит для всех возможных значений. Если это верно, затем is возвращает TRUE. Если is выводит тот cond, не удовлетворен никаким возможным значением, это возвращает FALSE. В противном случае, is возвращает UNKNOWN.

Если отношение дано is, и операнды являются комплексными числами или идентификаторами с этим свойством, is возвращает FALSE, потому что отношения содержит только с действительными объектами. См. Пример 4.

Это может произойти тот is возвращает UNKNOWN, несмотря на то, что запрошенное свойство содержит математически. См. Пример 5.

В MuPAD®, там также существует функциональный bool проверять отношение y rel z. Однако между bool существует два основных отличий и is:

  1. bool производит ошибку, если она не может решить, содержит ли отношение или нет; is(y rel z) возвращает UNKNOWN в этом случае.

  2. bool не принимает свойства во внимание.

См. пример 3.

Если bool(y rel z) возвращает TRUE, затем так делает is(y rel z). Однако is более мощно, чем bool, даже когда никакие свойства не включены. См. Пример 3. С другой стороны, is обычно намного медленнее, чем bool.

Примечание

Будьте осторожны при использовании is в условии if оператор или forв то время как, или repeat цикл: эти построения не могут обработать значение UNKNOWN. Используйте любой is(...) = TRUE или case оператор. См. Пример 6.

Если is потребности проверять, является ли постоянное символьное выражение нулем, затем это может использовать эвристический числовой нулевой тест на основе оценки с плавающей точкой. Несмотря на внутреннюю числовую стабилизацию, этот нулевой тест может дать неправильный ответ в исключительных патологических случаях; в таком случае, is может возвратить неправильный результат также.

Примеры

Пример 1

Идентификатор x принят, чтобы быть целым числом:

assume(x, Type::Integer):
is(x, Type::Integer), is(x > 0), is(x^2 >= 0)

Идентификатор x принят, чтобы быть положительным вещественным числом:

assume(x > 0):
is(x > 1), is(x >= 0), is(x < 0)

unassume(x):

Пример 2

is может вывести определенные факты, даже когда никакие свойства не были приняты явным образом:

is(x > x + 1), is(abs(x) >= 0)

is(Re(exp(x)), Type::Real)

Пример 3

Для отношений между числами, is дает к тем же ответам как bool:

bool(1 > 0), is(1 > 0)

is твердость больше постоянных символьных выражений, чем bool:

is(sqrt(14) <= sqrt(2)*sqrt(7)),
is(sin(10^20) > 0),
is(sqrt(2) > 1.41)

bool(sqrt(14) <= sqrt(2)*sqrt(7))
Error: Unable to evaluate to Boolean. [_leequal]
bool(sin(10^20) > 0)
Error: Unable to evaluate to Boolean. [_less]
is(exp(5), Type::Real), is(PI, Type::PosInt)

Пример 4

В следующем примере дано отношение со сложными объектами, возвращенным значением является FALSE:

is(0 < I), is(I + 1 > I), is(1 + 2*I <= 2 + 3*I)

Идентификатор в следующем примере принят, чтобы быть комплексным, но это могло быть действительно также:

assume(x, Type::Complex):
is(x > 0)

Следующее отношение является ложным, любой идентификатор x действительно, затем отношение является ложным, или идентификаторы не действительно, затем сравнение недопустимо:

unassume(x):
is(x + 1 < x)

unassume(x):

Пример 5

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

assume(x in Z_ and y in Z_ and x^2 + y^2 = 2);
is(x > 1)

unassume(x):

Пример 6

Необходимо соблюдать осторожность при использовании is в if операторы или forповторениев то время как циклы:

myabs := proc(x)
         begin
           if is(x >= 0) then
             x
           elif is(x < 0) then
             -x
           else
             procname(x)
           end_if
         end_proc:
assume(x < 0): myabs(1), myabs(-2), myabs(x)

Когда вызов is возвращает UNKNOWN, ошибка происходит потому что if ожидает TRUE или FALSE:

unassume(x): myabs(x)
Error: Unable to evaluate to Boolean. [if]
  Evaluating: myabs

Самым легким способом достигнуть желаемой функциональности является сравнение результата is с TRUE:

myabs := proc(x)
         begin
           if is(x >= 0) = TRUE then
             x
           elif is(x < 0) = TRUE then
             -x
           else
             procname(x)
           end_if
         end_proc:
myabs(x)

delete myabs:

Пример 7

is может обработать наборы, возвращенные solve. Они включают интервалы типа Dom::Interval и R_ = solvelib::BasicSet(Dom::Real):

assume(x >= 0 and x <= 1):
is(x in Dom::Interval([0, 1])), is(x in R_)

Следующий solve команда возвращает решение как бесконечный параметризованный набор типа Dom::ImageSet:

unassume(x): solutionset := solve(sin(x) = 0, x)

domtype(solutionset)

is может использоваться, чтобы проверять, содержится ли выражение в этом наборе:

is(20*PI in solutionset), is(PI/2 in solutionset)

delete solutionset:

Параметры

cond

Условие

ex

арифметическое выражение

set

Свойство, представляющее набор чисел (например, Type::PosInt) или набор, возвращенный solve; такой набор может быть элементом Dom::Interval, Dom::ImageSet, piecewise, или один из C_RQZ.

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

TRUEложь, или UNKNOWN.

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

Функции MuPAD

Для просмотра документации необходимо авторизоваться на сайте