Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:单位阶跃函数_Matlab_Function - Fatal编程技术网

MATLAB:单位阶跃函数

MATLAB:单位阶跃函数,matlab,function,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)) 错误是您的行:

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

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

错误是您的行:

[n,~] = size(t);
您只查询
t
的第一个维度,即
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提出的没有循环的解决方案要快得多。

错误在于您的线路:

[n,~] = size(t);
您只查询
t
的第一个维度,即
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提出的没有循环的解决方案要快得多。

我看不出函数背后的逻辑有任何错误,但您的实现非常冗长。在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

我看不出你函数背后的逻辑有什么问题,但是你的实现非常冗长。在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=t(:)
强制它成为列向量,或者预先调用
t=t(:)
强制它成为列向量是否确实要乘以0?另外,我相信显式转换为double要清晰得多。@Jonas oops,不,显然不是加0就是乘1。我在注释中添加了显式选项,可能比较清楚。我猜
nargin>1
应该是
nargin<2
。你确定要乘以0吗?另外,我相信显式转换为double要清晰得多。@Jonas oops,不,显然不是加0就是乘1。我在注释中添加了显式选项,它可能很清晰。我猜
nargin>1
应该是
nargin<2