在MATLAB / Octave中绘制不连续函数

时间:2014-12-19 03:42:42

标签: matlab plot octave

我无法在网络或文档中找到这个,虽然这可能是我自己的无能。我通过将x放在x向量中并将y放在fx向量中然后调用plot(x,fx)来绘制八度函数。但是,由于该函数具有巨大的垂直跳跃,因此会产生不需要的垂直线。我可以做plot(x,fx,"."),但这会使线条变得很粗糙。如何用细线绘制不连续的函数?

2 个答案:

答案 0 :(得分:3)

您可以在不连续处插入nan个。 自动化这种方法的一种方法是寻找大的差异商:

x = linspace(0,30,1000);
y = ceil(cos(x));
%%%%%%%%%%%%%%%%%%%%%%%
dxLimit = 10;
x = x(:).'; y = y(:).';
discontinuities = (abs(diff(y)./diff(x))>dxLimit);
x = [x; nan(1,length(x))];
y = [y; nan(1,length(y))];
x(2*find(~discontinuities)) = [];
y(2*find(~discontinuities)) = [];
x = x(:).'; y = y(:).';
%%%%%%%%%%%%%%%%%%%%%%%
plot(x,y,'-'); ylim(ylim+[-0.3,+0.3]);

答案 1 :(得分:1)

在Octave中,您可以像这样减小标记的大小:

x = 0:0.1:100;
fx = rand(length(x), 1)';
plot(x, fx, ".", "markersize", 1)