"写一条Matlab的指令,它将采用向量x并将其更改为y,以使x
的任何大于1
的元素设置为{{1} } y=1;
小于x
的每个元素都设置为-1
,而y=-1;
的元素位于-1和+1 之间,我们x
1}}。在k上测试,y=x
和t=linspace(0,10,400)
,并在同一轴上绘制x=2*sin(pi*t)
和x
。"
到目前为止,我已经使用此代码:
y
但我相信有更简洁的方法来编写我的代码第3行,这样它就不需要3个单独的语句,只需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
介于-1
和1
之间,部分(2)
具有x
大于1
的部分(3)
,而x
部分-1
小于(1)
。
我们首先执行的是x
和x .* (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}}