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

时间:2015-01-26 02:16:58

标签: matlab octave numerical-methods numerical

我试图找到一种方法来创建一个像下面那样的数字模式

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

我应该采取另一种方式吗?

2 个答案:

答案 0 :(得分:6)

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

只需使用线性增量运算符从0转到200000并将序列乘以(-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;

除了

有趣的是,对于(-1)^x的所有整数值,exp(i*pi*x)也等于x。我们可以使用Euler公式来验证这一点,其中:exp(i*pi*x) = cos(pi*x) + i*sin(pi*x)。由于属于整数的所有i*sin(pi*x) = 0的{​​{1}},我们确实得到x。替换偶数exp(i*pi*x) = cos(pi*x)将给我们1,而奇数x将给我们-1,因此x对于属于整数的所有exp(i*pi*x) = cos(pi*x) = (-1)^x

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

答案 1 :(得分:1)

尝试

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