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