MatLab中ezplot函数不能准确画出自定义阶跃函数运算后的函数图像。
figure
grid on
syms t f1
f1=sym(t.*t+u(t));
subplot(1,2,1);
ezplot(f1,[-1,2]);
c=-1:0.01:2;
f2=c.*c+u(c);
subplot(1,2,2);
plot(c,f2);
function f=u(x)
f=(x>0);
end
采用以下代码会报错。
figure
grid on
syms t f1
f1=sym(t.*u(t));
subplot(1,2,1);
ezplot(f1,[-1,2]);
function f=u(x)
f=(x>0);
end
报错行是:ezplot(f1,[-1,2]);
采用Matlab内置的sign函数,问题解决了。
figure
grid on
syms t f1
f1=sym(t.*t+u(t));
subplot(1,2,1);
ezplot(f1,[-1,2]);
c=-1:0.01:2;
f2=c.*c+u(c);
subplot(1,2,2);
plot(c,f2);
function f=u(x)
f=0.5+0.5.*sign(x);
end
能否用以下自定义的函数实现sym()调用?
function f=u(x)
f=(x>0);
end
因为如果不用sym()是能达到效果的。
以下面这个函数的绘制为例。
figure
grid on
t=-1:0.001:3
f=(exp(-1.*t).*cos(10.*pi.*t)).*(u(t-1)-u(t-2))
plot(t,f)
function f=u(x)
f=(x>0);
end
运行结果为:
那么导致这种现象的原因是什么?注意到图像中自动生成的不等式也是按规律出现的,即bu(t-a)以b * t-a替代,其他相加项同时加在不等式两端。tu(t)项出现时恰好无法写出不等式。
sym在遇到不等式的时候确实是不等号两边同时进行运算,sym( t.*(t>0) )并不是不等号两边直接乘以t,而是会写成分段函数的形式,分为 t>0 和 t<0的情况,即 f1 = piecewise(0 < t, 0 < t^2, t < 0, t^2 < 0), ezplot看起来是不能处理这种函数。