has

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

Синтаксис

Описание

пример

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

  • Если 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 ложь), что означает, что решение не содержит вызовы ни одного 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