matlab中的stepfun函数和heaviside函数

文章讲述了用户在不同MATLAB版本间遇到的stepfun函数识别问题,通过手动添加函数或使用heaviside函数作为替代,解决了跨版本兼容性问题。作者还提到heaviside函数在新版本中的普遍使用情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

无法识别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函数”的帖子。
大家天天开心,学业进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值