我正在尝试使用Matlab在interval内绘制离散的斜坡序列[-10, 10]
。
这是我的代码:
function Ramp()
rampseq(-10, 10);
end
function rampseq (n1, n2)
n = (n1:1:n2);
stem (n, pw(n));
end
function y = pw(n)
if (n < 0)
y = 0;
return;
else
y = n;
return;
end
end
我在pw(n)
函数中定义了序列的行为(“逐段”的缩写)。请注意,如果n < 0
,输出应为0
or,否则n >= 0
,输出应为n
本身。但是,该图显示为:
这不是斜坡序列,因为Y值不是 0
when n < 0
,与pw(n)
函数中定义的行为相反。我要去哪里错了?是否由于if
某种原因而跳过了该语句?命令窗口不显示任何错误。
您正在将整个向量传递n
给pw()
函数。但是,该pw()
函数随后将n
与0(标量)进行比较。
您可以调整pw()
函数以对矢量输入进行操作,如下所示:
function y = pw(n)
y = n;
y(n < 0) = 0;
end
谢谢。您能解释一下它在向量输入上如何工作吗?该声明
y = n
和y(n < 0) = 0
做什么?n
在这种情况下也不是向量吗?y = n;
创建与相同的向量n
。然后,该n < 0
零件将创建一个与()大小相同的逻辑(布尔)向量n
,true
其中wheren
为负,false
wheren
为非负。Matlab允许您使用此逻辑向量对向量进行索引y
。因此,该y(n < 0) = 0;
部件将零值分配给所有y
为负的元素。