1

MATLAB:表达式中的“大于”符号:(1-X).*(X>1) 是什么意思?

X 是一个列向量,理论上 X 的每个元素都在 0 到 1 的范围内。在数值上,由于精度有限,一个元素可能会稍微超过 1.0,因此这可能是一种条件或约束。

有任何想法吗?

4

2 回答 2

3

在您描述的上下文中,它本质上是“选择”大于 1 的元素并从 1 中减去它们;结果中的所有其他元素(位于 位置的元素X <= 1)将为 0,因为它们已乘以 的结果中的零X > 1。这是一个例子:

>> X = [0 0.5 1 1.5 2];
>> X > 1

ans =

 0     0     0     1     1

>> (1 - X)

ans =

1.0000    0.5000         0   -0.5000   -1.0000

>> (1 - X) .* (X > 1)

ans =

     0         0         0   -0.5000   -1.0000

在最后一个结果中,第一个结果中的三个零已(按元素)与中间结果中的前三个值相乘,并且这两个零与中间结果中的最后两个值相乘。这样,它就有效地选择了(1-X)的结果在X > 1开始的位置。

显然,如果 X 的任何值都不大于 1,那么结果将始终全为零。

于 2013-03-24T13:08:06.717 回答
2

对于大于 1 的每个元素,表达式(X > 1)返回(逻辑 '1'),否则返回 (逻辑 '0')。因此,会生成一个布尔向量(与 相同大小),其中包含 '1',其中对应的元素大于 1。我强烈建议您更加熟悉MATLAB 运算符truefalseX > 1XX

至于表达式的其余部分:

(1 - X)简单地返回一个与 维数相同的向量,其中每个元素都是从 1X中减去相应元素的结果。X

.*是逐元素乘法,因此最终结果是一个向量(与 具有相同的维度),如果 X i >1,则X第 i 个元素等于 (1 - X i ),否则为 0。

例子

 >> X = [-1 4 0 2 -3];
 >> X > 1

 ans =
      0     1     0     1     0

 >> 1 - X

 ans =
      2    -3     1    -1     4

 >> (1 - X) .* (X > 1)

 ans =
      0    -3     0    -1     0
于 2013-03-24T13:10:21.967 回答