Я пытаюсь найти способ создать числовой шаблон, подобный приведенному ниже

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

Есть ли другой способ сделать это?

0
Rick T 26 Янв 2015 в 05:16

2 ответа

Лучший ответ

Метод №1 - Использование (-1)^x

Просто используйте оператор линейного приращения, чтобы перейти от 0 к 200000, и умножьте последовательность на (-1)^(x+1), чтобы знак последовательности изменился:

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

Добавление +1 важно для того, чтобы четные позиции получили положительный знак, а нечетные - отрицательный.

Метод # 2 - Использование индексации

В качестве альтернативы вы можете объявить тот же массив от 0 до 200000, проиндексировать каждую четную позицию и инвертировать знак:

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

Метод № 3 - Использование тригонометрии и целых чисел

Еще один, чтобы добавить в смесь. Вы знаете, что для cos(x*pi) вывод равен -1, когда x нечетный, и вывод равен 1, когда x четно. Нам нужно перевернуть это для вашего случая и в конечном итоге использовать эту чередующуюся последовательность для умножения на тот же массив, идущий от 0 к 200000, и, следовательно:

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

В стороне

Интересно, что (-1)^x также равно exp(i*pi*x) для всех значений 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, принадлежащих целым числам, поэтому первый метод в любом случае действительно равен третьему!

6
rayryeng 26 Янв 2015 в 20:23

Пытаться

f_num= @(x) x * (-1)^(x+1);
1
Loreno Heer 26 Янв 2015 в 02:20