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

Ric*_*k T 0 matlab numerical octave numerical-methods

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

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
Run Code Online (Sandbox Code Playgroud)

还有另一种方法我应该这样做吗?

ray*_*ica 6

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

只需使用一个线性递增运营商从去0200000繁衍序列通过(-1)^(x+1)允许序列替代的符号:

x = 0:200000;
y = ((-1).^(x+1)) .* x;
Run Code Online (Sandbox Code Playgroud)

添加该+1值非常重要,以便偶数位置得到正号,而奇数位置得到负号.

方法#2 - 使用索引

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

x = 0:200000;
x(2:2:end) = -x(2:2:end);
Run Code Online (Sandbox Code Playgroud)

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

还有一个投入混合.你知道,对于cos(x*pi),x奇数时输出为-1,偶数时输出为1 x.我们需要翻转这对于你的情况,并最终利用这个交替序列用相同的阵列从去乘0200000,因此:

x = 0:200000;
y = (-cos(x*pi)).*x;
Run Code Online (Sandbox Code Playgroud)

在旁边

有趣的是,(-1)^x它也等于exp(i*pi*x)所有的x整数值.我们可以使用Euler公式来验证这一点,其中: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属于整数的方法,所以第一种方法实际上与第三种方法完全相同!