I'm trying to find a way to create a number pattern like the one below
0,1,-2,3,-4,5
....
Please note: it needs to go to 200000, but I will be splitting them up into groups of 2000.
I found a formula that looks like it would work on http://oeis.org/A181983, but when I create the formula in MATLAB / Octave, the numbers don't match up:
f_num= @(x) x / (1 + x)^2;
numval = f_num(1)
numval = 0.25000
Is there another way I should be doing this?
(-1)^x
Just use a linear increment operator to go from 0
to 200000
and multiply the sequence by (-1)^(x+1)
to allow the sign of the sequence to alternate:
x = 0:200000;
y = ((-1).^(x+1)) .* x;
The addition of the +1
is important so that the even positions get a positive sign while the odd positions get a negative sign.
Alternatively, you can declare the same array from 0
to 200000
, index into every even position and negate the sign:
x = 0:200000;
x(2:2:end) = -x(2:2:end);
One more to throw into the mix. You know that for cos(x*pi)
, the output is -1 when x
is odd and the output is 1 when x
is even. We need to flip this for your case and ultimately use this alternating sequence to multiply with the same array going from 0
to 200000
, and therefore:
x = 0:200000;
y = (-cos(x*pi)).*x;
Interestingly enough, (-1)^x
is also equal to exp(i*pi*x)
for all values of x
that are integer. We can verify this by using Euler's formula where: exp(i*pi*x) = cos(pi*x) + i*sin(pi*x)
. Since i*sin(pi*x) = 0
for all x
belonging to an integer, we really get exp(i*pi*x) = cos(pi*x)
. Substituting even numbers of x
will give us 1 while odd numbers of x
will give us -1, and hence exp(i*pi*x) = cos(pi*x) = (-1)^x
for all x
belonging to integers.
Also, (-1)^(x+1) = -(-1)^x = -cos(x*pi)
for all x
belonging to integers and so the first method is really equal to the third method anyway!