主要内容

检查表达式是否包含特定的子表达式

描述

例子

有(exprsubexpr返回逻辑1(真正的)如果expr包含subexpr.否则,返回逻辑的0(假)。

  • 如果expr是一个数组,(expr subexpr)返回大小相同的数组expr.返回的数组包含逻辑数组1(真)其中的元素expr包含subexpr和逻辑0(错误)在他们不知道的地方。

  • 如果subexpr是一个数组,(expr subexpr)检查是否expr包含subexpr

例子

检查表达式是否包含特定子表达式

使用函数检查表达式是否包含特定的变量或子表达式。

检查这些表达式是否包含变量z

Syms x y z has(x + y + z, z)
逻辑1
有(x + y, z)
逻辑0

检查是否X + y + z包含以下子表达式。请注意,发现子表达式x + z即使条款xz在表达中不要紧挨着对方出现。

have (x + y + z, x + y) Has (x + y + z, y + z) Has (x + y + z, x + z)
Ans = logical 1 Ans = logical 1

检查表达式是否(x + 1) ^ 2包含x ^ 2.虽然(x + 1) ^ 2在数学上与表达式等价吗X ^2 + 2* X + 1,结果是合乎逻辑的0因为在测试子表达式时,通常不会将表达式转换为不同的形式。

有(x + 1)^2, x^2
逻辑0

展开表达式,然后调用检查结果是否包含x ^ 2.因为扩大((x + 1) ^ 2)将原始表达式转换为X ^2 + 2* X + 1,函数查找子表达式x ^ 2并返回逻辑1

将(x + 1)^2, x^2展开
逻辑1

检查表达式是否包含任何指定的子表达式

检查符号表达式是否包含指定为向量元素的任何子表达式。

如果一个表达式包含一个或多个指定的子表达式,返回逻辑1

信谊x (sin (x) + cos (x) + x ^ 2, (tan (x),床(x) sin (x), exp (x)))
逻辑1

如果表达式不包含任何指定的子表达式,返回逻辑0

信谊x (sin (x) + cos (x) + x ^ 2, (tan (x),床(x) exp (x)))
逻辑0

查找包含特定子表达式的矩阵元素

使用,找到符号矩阵中包含特定子表达式的元素。

首先,创建一个矩阵。

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

使用来检查包含sin (x).结果是一个大小相同的矩阵,10作为它的元素。对于元素包含指定表达式的,返回逻辑1.对于不包含该子表达式的元素,返回逻辑0

T = has(M, sinx)
T = 2×2 logical array 1 0 0 1 .输出说明

只返回包含sin (x)并将所有其他元素替换为0乘以通过Telementwise。

T m . *
Ans = [sin(x)*sin(y), 0] [0,2 *sin(x)²]

若要检查任何矩阵元素是否包含特定的子表达式,请使用任何

任何((M (:), sin (x)))
逻辑1
任何((M(:),因为(y)))
逻辑0

查找包含任意指定子表达式的向量元素

使用,查找符号向量中包含任何指定子表达式的元素。

信谊x y z T = ([x + 1, cos (y) + 1, y + z, 2 * x * cos (y)], [x,因为(y)])
T = 1×4 logical array 1 1 0 1 .输出说明

只返回包含的原始向量的元素x因为(y)或者两者兼而有之,然后用0用原始向量乘以Telementwise。

[x + 1, cos(y) + 1, y + z, 2*x*cos(y)]
Ans = [x + 1, cos(y) + 1,0,2 *x*cos(y)]

使用符号函数

如果exprsubexpr是一个符号函数,使用公式(expr)公式(subexpr).这种方法允许函数检查表达式是否定义了符号函数expr包含定义符号函数的表达式subexpr

创建一个符号函数。

Syms x f(x) = sinx + cos(x);

在这里,sin (x) + cos (x)一个表达式定义了符号函数吗f

公式(f)
Ans = cosx + sinx

检查是否ff (x)包含sin (x).在这两种情况下检查表达式是否sin (x) + cos (x)包含sin (x)

Has (f, sin(x)) Has (f(x), sin(x))
Ans = logical 1

检查是否f (x ^ 2)包含f.对这些参数,返回逻辑0(false)因为它不检查表达式是否f (x ^ 2)包含字母f.这个调用等价于(f (x ^ 2),公式(f)),而它又决定有cos(x^2) + sin(x^2) cos(x) + sin(x)

(f (x ^ 2), f)
逻辑0

检查对特定函数的调用

通过指定函数名作为第二个参数来检查对特定函数的调用。通过将多个函数指定为字符向量的单元格数组,检查对多个函数中的任何一个函数的调用。

集成谭(x ^ 7).通过检查调用的结果来确定集成是否成功int.因为找到了int函数并返回逻辑1真正的),整合不成功。

Syms x f = int(tan(x^7), x);(f,“int”)
逻辑1

检查微分方程的解是否包含对其中任意一个的调用因为通过指定第二个参数为{‘罪’,‘因为’}.的函数返回逻辑0),这意味着解决方案不包含对两者的调用因为

Syms y(x) a sol = dsolve(diff(y,x) == a*y);(索尔,{‘因为’‘罪恶’})
逻辑0

输入参数

全部折叠

要测试的表达式,指定为符号表达式、函数、方程或不等式。它也可以是一个向量、矩阵或符号表达式、函数、方程和不等式的数组。

要测试的子表达式,指定为符号变量、表达式、函数、方程或不等式、字符向量或字符向量的单元格数组。subexpr也可以是一个向量、矩阵或符号变量、表达式、函数、方程和不等式的数组。

提示

  • 不转换或简化表达式。这就是为什么它找不到类似的子表达式x ^ 2这样的表情(x + 1) ^ 2.然而,在某些情况下可能会发现表达式或子表达式可以用其原始形式以外的形式表示。例如,发现表达式- x - 1可以表示为——(x + 1).因此,调用有(-x - 1, x + 1)返回1

  • 如果expr为空符号数组,返回与。相同大小的空逻辑数组expr

另请参阅

||

介绍了R2015b