Я пытаюсь найти способ создать числовой шаблон, подобный приведенному ниже
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 ответа
Метод №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
, принадлежащих целым числам, поэтому первый метод в любом случае действительно равен третьему!
Пытаться
f_num= @(x) x * (-1)^(x+1);
Похожие вопросы
Новые вопросы
matlab
MATLAB - это высокоуровневая языковая и интерактивная среда программирования для численных расчетов и визуализации, разработанная MathWorks. Не используйте оба тега [matlab] и [octave], если явно не задан вопрос о сходстве или различии между ними. При использовании этого тега, пожалуйста, укажите версию MATLAB, с которой вы работаете (например, R2017a).