我知道,如果我想生成 y=sin(2x) 的 y 值,我可以这样做:
y = sin(0:.01:2*2);
但是,如果我想生成 y = 0 的值,除非 x 是 1 的倍数或 sqrt(2) 点 y=1,我将如何解决这个问题?我必须围绕这些值创建一个窗口并希望步长足够小以捕获它吗?谢谢你。
我知道,如果我想生成 y=sin(2x) 的 y 值,我可以这样做:
y = sin(0:.01:2*2);
但是,如果我想生成 y = 0 的值,除非 x 是 1 的倍数或 sqrt(2) 点 y=1,我将如何解决这个问题?我必须围绕这些值创建一个窗口并希望步长足够小以捕获它吗?谢谢你。
使用逻辑条件。例如,从 some y(x)
then开始y(y==1)
将针对此条件生成 y 值,并在其他位置生成零。对于更通用的条件,您可以使用mod
等ismember
。您将遇到的另一个问题是将整数与浮点数匹配,您必须先四舍五入,然后使用上面提到的函数。
好的我明白了。同样,浮点算术不做相等,所以你的例子不起作用。此外,由于您以谨慎的间隔对函数进行采样,因此很难捕获 delta 函数。所以不要这样做。相反,如果您正在寻找标准的分段函数,那么这个想法是:
x = 0:.01:2;
x1_locations = x < 1;
x2_locations = ~x;
y = zeros(size(x));
y(x1_locations) = sin(2*x(x1_locations));
y(x2_locations) = cos(3*x(x2_locations));
再说一次,这不起作用的原因x1_locations = (floor(x/sqrt(2)) == x/sqrt(2))
是,你永远不会碰到 x 的确切位置来显示这个,即使你这样做了,浮点表示中的舍入错误仍然可能会让你错过位置。如果您可以使用近似值,请使用与您感兴趣的值的最大绝对差。