имеет

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

Синтаксис

has(expr,subexpr)

Описание

пример

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

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

  • Если 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