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
。