Проверяйте, содержит ли выражение конкретное подвыражение
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
has
не преобразовывает или упрощает выражения. Поэтому это не находит подвыражения как x^2
в выражениях как (x + 1)^2
. Однако в некоторых случаях has
может найти, что выражение или подвыражение могут быть представлены в форме кроме ее исходной формы. Например, has
находит что выражение -x - 1
может быть представлен как -(x + 1)
. Таким образом, вызов has(-x - 1, x + 1)
возвращает 1
.
Если expr
пустой символьный массив, has
возвращает пустой логический массив одного размера с expr
.