-1

我知道,如果我想生成 y=sin(2x) 的 y 值,我可以这样做:

y = sin(0:.01:2*2); 

但是,如果我想生成 y = 0 的值,除非 x 是 1 的倍数或 sqrt(2) 点 y=1,我将如何解决这个问题?我必须围绕这些值创建一个窗口并希望步长足够小以捕获它吗?谢谢你。

4

2 回答 2

1

使用逻辑条件。例如,从 some y(x)then开始y(y==1)将针对此条件生成 y 值,并在其他位置生成零。对于更通用的条件,您可以使用modismember。您将遇到的另一个问题是将整数与浮点数匹配,您必须先四舍五入,然后使用上面提到的函数。

于 2013-03-05T16:18:29.220 回答
0

好的我明白了。同样,浮点算术不做相等,所以你的例子不起作用。此外,由于您以谨慎的间隔对函数进行采样,因此很难捕获 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 的确切位置来显示这个,即使你这样做了,浮点表示中的舍入错误仍然可能会让你错过位置。如果您可以使用近似值,请使用与您感兴趣的值的最大绝对差。

于 2013-03-05T17:12:21.013 回答