无法识别stepfun
函数
背景
今天上课时有用到stepfun函数,我带去了自己的笔记本发现但发现笔记本上无法运行这个函数(笔记本上matlab是R2022a版),然而教学用的电脑上可以运行(版本是R2014)。当时上网查找了一番也没找到个具体解释。
转折
我也不知道是什么原因导致的。因为当时事先我已经安装了Signal Processing Toolbox,而且当时有重启尝试,结果都没用。但奇怪的是我晚上重新写报告时,发现笔记本上可以正常使用stepfun函数了。。。
考虑到当时当时上网查找解决方法时又看到别人也在发帖求助,明显无法识别stepfun函数的情况不是个例,所以我把解决办法放在下面。
解决方案
1、手动增添stepfun函数
自行添加stepfun到函数库,之后就可以直接调用了。
f=stepfun(T,T0)
单位阶跃函数,输入参数T为单调递增的向量,T0指定阶跃点,返回值f是与T长度相同的向量。
其函数代码如下:
function y = stepfun(t,to)
%STEPFUN Unit step function.
% STEPFUN(T,T0), where T is a monotonically increasing vector,
% returns a vector the same length as T with zeros where T < T0
% and ones where T >= T0.
% J.N. Little 6-3-87
% Copyright 1986-2002 The MathWorks, Inc.
[m,n] = size(t);
y = zeros(m,n);
i = find(t>=to);
if isempty(i)
return
end
i = i(1);
if m == 1
y(i:n) = ones(1,n-i+1);
else
y(i:m) = ones(m-i+1,1);
end
2、用heaviside函数替代
H = heaviside(x)
返回值H是x处的heaviside阶跃函数(即单位阶跃函数)。但heaviside函数是一个不连续函数,当x < 0时返回0,当x = 0时返回1/2,当x > 0时返回1。
当x是一个递增的向量时,就可与stepfun函数作替换。
对比如下:
stepfun函数:
t=-5:0.01:5;
t1=0;t2=1;
u1=stepfun(t,t1);
u2=stepfun(t,t2);
subplot(121)
hold on
plot(t,u1)
axis([-1,8,-2,5])
plot([0,0],[-2,5],'k--')
gtext('\leftarrowx=0')
hold off
subplot(122)
hold on
plot(t,u2)
axis([-1,8,-2,5])
plot([1,1],[-2,5],'k--')
gtext('\leftarrowx=1')
结果图:
heaviside函数:
t=-5:0.01:5;
u1=heaviside(t);
u2=heaviside(t-1);
subplot(121)
hold on
plot(t,u1)
axis([-1,8,-2,5])
plot([0,0],[-2,5],'r--')
gtext('\leftarrowx=0','color','r')
hold off
subplot(122)
hold on
plot(t,u2)
axis([-1,8,-2,5])
plot([1,1],[-2,5],'r--')
gtext('\leftarrowx=1','color','r')
hold off
结果图:
结语
两个函数的用法区别就只在于stepfun函数需要单独指明阶跃点,而heaviside则可以通过对自变量的改变而实现,更符合我们平时处理函数的习惯。
随着版本的更新,貌似heaviside函数使用更为普遍了?反正我是没看见网上有类似“matlab无法识别heaviside函数”的帖子。
大家天天开心,学业进步!