出于某种原因,当我尝试创建一个简单的单位阶梯函数时,我只收到一条直线。我很确定这是正确的,但我的图表却告诉我。有什么我做错了吗?
function mone=myOne(t)
[n,~] = size(t);
mone=zeros(n,1);
for i=1:n,
if (t(i)>0),
mone(i) = 1;
end
end
在命令窗口中输入,
t = [-5:0.01:5]
plot(t, myOne(t))
答案 0 :(得分:2)
错误就是你的行:
[n,~] = size(t);
您只需查询t
的第一维,即<{p}后面的1
t = [-5:0.01:5]
size(t)
ans =
1 1001
您可以转置t
t = [-5:0.01:5].';
size(t)
ans =
1001 1
或您length
代替size
。
n = length(t);
最后,没有@Dan提出的循环的解决方案要快得多。
答案 1 :(得分:2)
我无法看到你的功能背后的逻辑有什么问题,但你的实现很长。在Matlab中你可以这样做:
function mone=myOne(t)
mone = t > 0;
end
或者如果你想获得一个数字矩阵而不是返回逻辑,请尝试
function mone=myOne(t)
mone = (t > 0)*1; %// Or if you prefer to cast explicitly:
%// double(t>0)
end
还要添加一个默认设置为零的shift参数:
function mone=myOne(t, T)
if nargin < 2
T = 0;
end
mone = (t > T)*1;
end
用法:
t = [-5:0.01:5]
plot(t, myOne(t))
plot(t, myOne(t,3))