exponenta event banner

имеет

Проверьте, содержит ли выражение определенное вложенное выражение

Синтаксис

Описание

пример

has(expr,subexpr) возвращает логический 1 (true), если expr содержит subexpr. В противном случае возвращается логическое значение 0 (ложь).

  • Если expr является массивом, has(expr,subexpr) возвращает массив того же размера, что и expr. Возвращенный массив содержит логический 1s (true), где элементы expr содержать subexpr, и логический 0s (ложь) где они этого не делают.

  • Если subexpr является массивом, has(expr,subexpr) проверяет, expr содержит любой элемент subexpr.

Примеры

Проверьте, содержит ли выражение конкретное вложенное выражение

Используйте has чтобы проверить, содержит ли выражение определенную переменную или вложенное выражение.

Проверьте, содержат ли эти выражения переменную z.

syms x y z
has(x + y + z, z)
ans =
  logical
   1
has(x + y, z)
ans =
  logical
   0

Проверить, x + y + z содержит следующие вложенные выражения. Обратите внимание, что has находит подэкспрессию x + z несмотря на то, что условия x и z не появляются рядом друг с другом в выражении.

has(x + y + z, x + y)
has(x + y + z, y + z)
has(x + y + z, x + z)
ans =
  logical
   1
ans =
  logical
   1
ans =
  logical
   1

Проверка выражения (x + 1)^2 содержит x^2. Хотя (x + 1)^2 математически эквивалентно выражению x^2 + 2*x + 1, результат является логическим 0 потому что has обычно не преобразует выражения в различные формы при тестировании вложенных выражений.

has((x + 1)^2, x^2)
ans =
  logical
   0

Разверните выражение, а затем вызовите has чтобы проверить, содержит ли результат x^2. Поскольку expand((x + 1)^2) преобразует исходное выражение в x^2 + 2*x + 1, has функция находит подэкспрессию x^2 и возвращает логический 1.

has(expand((x + 1)^2), x^2)
ans =
  logical
   1

Проверьте, содержит ли выражение какое-либо из указанных вложенных выражений

Проверьте, содержит ли символьное выражение какое-либо из вложенных выражений, указанных как элементы вектора.

Если выражение содержит одно или несколько указанных вложенных выражений, has возвращает логический 1.

syms x
has(sin(x) + cos(x) + x^2, [tan(x), cot(x), sin(x), exp(x)])
ans =
  logical
   1

Если выражение не содержит ни одного из указанных вложенных выражений, has возвращает логический 0.

syms x
has(sin(x) + cos(x) + x^2, [tan(x), cot(x), exp(x)])
ans =
  logical
   0

Поиск элементов матрицы, содержащих конкретное вложенное выражение

Используя has, найти те элементы символьной матрицы, которые содержат определенное вложенное выражение.

Сначала создайте матрицу.

syms x y
M = [sin(x)*sin(y), cos(x*y) + 1; cos(x)*tan(x), 2*sin(x)^2]
M =
[ sin(x)*sin(y), cos(x*y) + 1]
[ cos(x)*tan(x),   2*sin(x)^2]

Использовать has проверить, какие элементы M содержать sin(x). Результатом является матрица того же размера, что и M, с 1s и 0s в качестве его элементов. Для элементов M содержащий указанное выражение, has возвращает логический 1s. Для элементов, не содержащих это вложенное выражение, has возвращает логический 0s.

T = has(M, sin(x))
T =
  2×2 logical array
     1     0
     0     1

Возвращать только элементы, которые содержат sin(x) и заменить все остальные элементы на 0 умножением M около T элементарно.

M.*T
ans =
[ sin(x)*sin(y),          0]
[             0, 2*sin(x)^2]

Чтобы проверить, содержит ли какой-либо из элементов матрицы определенное вложенное выражение, используйте any.

any(has(M(:), sin(x)))
ans =
  logical
   1
any(has(M(:), cos(y)))
ans =
  logical
   0

Поиск векторных элементов, содержащих любое из указанных вложенных выражений

Используя hasнайдите те элементы символьного вектора, которые содержат любое из указанных вложенных выражений.

syms x y z
T = has([x + 1, cos(y) + 1, y + z, 2*x*cos(y)], [x, cos(y)])
T =
  1×4 logical array
     1     1     0     1

Возвращает только элементы исходного вектора, содержащие x или cos(y) или оба, и заменить все другие элементы на 0 умножением исходного вектора на T элементарно.

[x + 1, cos(y) + 1, y + z, 2*x*cos(y)].*T
ans =
[ x + 1, cos(y) + 1, 0, 2*x*cos(y)]

Использовать has для символьных функций

Если expr или subexpr является символической функцией, has использование formula(expr) или formula(subexpr). Этот подход позволяет has проверка наличия выражения, определяющего символьную функцию expr содержит выражение, определяющее символическую функцию subexpr.

Создайте символическую функцию.

syms x
f(x) = sin(x) + cos(x);

Здесь, sin(x) + cos(x) - выражение, определяющее символическую функцию f.

formula(f)
ans =
cos(x) + sin(x)

Проверить, f и f(x) содержать sin(x). В обоих случаях has проверяет, является ли выражение sin(x) + cos(x) содержит sin(x).

has(f, sin(x))
has(f(x), sin(x))
ans =
  logical
   1
ans =
  logical
   1

Проверить, f(x^2) содержит f. Для этих аргументов, has возвращает логический 0 (false), поскольку он не проверяет, является ли выражение f(x^2) содержит письмо f. Этот вызов эквивалентен has(f(x^2), formula(f)), которая, в свою очередь, решает has(cos(x^2) + sin(x^2), cos(x) + sin(x)).

has(f(x^2), f)
ans =
  logical
   0

Проверка вызовов определенной функции

Проверьте наличие вызовов определенной функции, указав имя функции в качестве второго аргумента. Проверьте наличие вызовов любой из нескольких функций, указав несколько функций как массив ячеек символьных векторов.

Объединяться tan(x^7). Определение успешности интеграции путем проверки результатов вызовов для int. Поскольку has находит int функция и возвращает логический 1 (true), интеграция не является успешной.

syms x
f = int(tan(x^7), x);
has(f, 'int')
ans =
  logical
   1

Проверьте, содержит ли решение дифференциального уравнения вызовы sin или cos путем указания второго аргумента как {'sin','cos'}. has функция возвращает логические 0 (false), что означает, что решение не содержит вызовов sin или cos.

syms y(x) a
sol = dsolve(diff(y,x) == a*y);
has(sol, {'sin' 'cos'})
ans =
  logical
   0

Входные аргументы

свернуть все

Выражение для проверки, указанное как символическое выражение, функция, уравнение или неравенство. Также это может быть вектор, матрица или массив символьных выражений, функций, уравнений и неравенств.

Подэкспрессия для проверки, указанная как символьная переменная, выражение, функция, уравнение или неравенство, или символьный вектор, или клеточный массив символьных векторов. subexpr также может быть вектором, матрицей или массивом символьных переменных, выражений, функций, уравнений и неравенств.

Совет

  • has не преобразует и не упрощает выражения. Вот почему он не находит вложенных выражений, как x^2 в выражениях, таких как (x + 1)^2. Однако в некоторых случаях has может обнаружить, что выражение или подэкспрессия могут быть представлены в форме, отличной от ее исходной формы. Например, has находит, что выражение -x - 1 может быть представлен как -(x + 1). Таким образом, вызов has(-x - 1, x + 1) прибыль 1.

  • Если expr - пустой символьный массив, has возвращает пустой логический массив того же размера, что и expr.

См. также

| |

Представлен в R2015b