在 MATLAB / Octave 中创建递增整数交替序列

Create an increasing integer alternating sequence in MATLAB / Octave

我正在尝试找到一种方法来创建如下所示的数字模式

0,1,-2,3,-4,5...

请注意:它需要达到 200000,但我会将它们分成 2000 组

我找到了一个看起来适用于 http://oeis.org/A181983 的公式,但是当我在 MATLAB / Octave 中创建公式时,数字不匹配:

f_num= @(x) x / (1 + x)^2;
numval = f_num(1)
numval =  0.25000

还有其他方法吗?

尝试

f_num= @(x) x * (-1)^(x+1);

方法#1 - 使用(-1)^x

只需使用线性增量运算符从 0200000 并将序列乘以 (-1)^(x+1) 以允许序列的符号交替:

x = 0:200000;
y = ((-1).^(x+1)) .* x;

添加 +1 很重要,这样偶数位置得到正号,而奇数位置得到负号。

方法 #2 - 使用索引

或者,您可以声明从 0200000 的相同数组,索引到每个偶数位置并取反符号:

x = 0:200000;
x(2:2:end) = -x(2:2:end);

方法 #3 - 使用三角函数和整数

再加入一个。您知道对于 cos(x*pi),当 x 为奇数时输出为 -1,而当 x 为偶数时输出为 1。我们需要针对您的情况翻转它,并最终使用这个交替序列与从 0200000 的相同数组相乘,因此:

x = 0:200000;
y = (-cos(x*pi)).*x;

放在一边

有趣的是,对于 x 的所有整数值,(-1)^x 也等于 exp(i*pi*x)。我们可以使用欧拉公式验证这一点,其中:exp(i*pi*x) = cos(pi*x) + i*sin(pi*x)。由于i*sin(pi*x) = 0对于所有属于整数的x,我们真的得到exp(i*pi*x) = cos(pi*x)。代入偶数 x 将得到 1,而代入奇数 x 将得到 -1,因此 exp(i*pi*x) = cos(pi*x) = (-1)^x 代表所有属于整数的 x

此外,(-1)^(x+1) = -(-1)^x = -cos(x*pi) 对于所有属于整数的 x 所以第一种方法实际上等于第三种方法!