在MATLAB中使用多个替换进行逻辑索引

时间:2014-04-12 02:45:28

标签: matlab indexing logical-operators

"写一条Matlab的指令,它将采用向量x并将其更改为y,以使x的任何大于1的元素设置为{{1} } y=1;小于x的每个元素都设置为-1,而y=-1; 的元素位于-1和+1 之间,我们x 1}}。在k上测试,y=xt=linspace(0,10,400),并在同一轴上绘制x=2*sin(pi*t)x。"

到目前为止,我已经使用此代码:

y

但我相信有更简洁的方法来编写我的代码第3行,这样它就不需要3个单独的语句,只需1.希望有人可以提供帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

试试这个:

y = x .* (abs(x) <= 1) + (x > 1) - (x < -1);

<强>解释

假设您有x = [-2.0 -1.5 -1.0 -0.5 0 0.5 1.0 1.5 2.0]

让我们将表达式分为三个部分并查看结果:

(1) abs(x) <= 1 --> 0  0  1  1  1  1  1  0  0
(2) x > 1 --------> 0  0  0  0  0  0  0  1  1
(3) x < -1 -------> 1  1  0  0  0  0  0  0  0

请注意,部分(1)包含x介于-11之间,部分(2)具有x大于1的部分(3),而x部分-1小于(1)

我们首先执行的是xx .* (abs(x) <= 1) -> 0.0 0.0 -1.0 -0.5 0 0.5 1.0 0.0 0.0] 部分之间的点积,它给出了我们的信息:

(2)

现在,我们将部分x .* (abs(x) <= 1) + (x > 1) -> 0.0 0.0 -1.0 -0.5 0 0.5 1.0 1.0 1.0] 加到这里以用向量填充向量(在这种情况下,在结尾处):

(3)

要完成,我们减去部分x .* (abs(x) <= 1) + (x > 1) - (x < -1) -> -1.0 -1.0 -1.0 -0.5 0 0.5 1.0 1.0 1.0] ,因此它将用-1填充剩余的零:

{{1}}