MATLAB:单位阶跃函数

时间:2015-01-23 08:00:48

标签: matlab function

出于某种原因,当我尝试创建一个简单的单位阶梯函数时,我只收到一条直线。我很确定这是正确的,但我的图表却告诉我。有什么我做错了吗?

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))

2 个答案:

答案 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))