Matlab函数表示

时间:2013-03-05 15:52:16

标签: matlab

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

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

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

2 个答案:

答案 0 :(得分:1)

使用逻辑条件。例如,从某些y(x)开始,然后y(y==1)将为此条件生成y的值,并在其他位置生成零。对于更通用的条件,您可以使用modismember等。您将拥有的另一个问题是将整数与浮点数匹配,您必须先进行舍入然后使用上述函数。

答案 1 :(得分: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的确切位置来表示这一点,即使你做了,也会发现舍入错误浮点表示可能仍然会让您错过位置。如果您对近似值没有问题,请使用与您感兴趣的值的最大绝对差值。