Я медленный и пока не совсем понимаю, что вы пытаетесь сделать.Не могли бы вы описать это словами?Когда вы это сделаете, разделите спецификацию элементов данных массива, с которыми вы хотите работать, и спецификацию кумулятивной суммы. Функция Matlab cumsum
не требует каких-либо условий, вы должны написать операторы Matlab, чтобы выбрать данные, которые вы хотите выбрать.хочу суммировать первое.
Ваше второе условие data(1:end-1)==data(2:end)
мне кажется подозрительным, поскольку они используют линейное индексирование, что, вероятно, не то, что вам нужно.Если вы не понимаете термин линейное индексирование , попробуйте поэкспериментировать с несколькими ссылками, такими как data (4) и data (24), то есть одномерные индексы в двумерный массив.
Таким образом, утверждение
index = diff([0;data(:,1)])> 0 && diff([0;data(:,2); 0])~= 0;
вызывает ошибки.Здесь вы должны использовать Matlab в интерактивном режиме, чтобы создать оператор, который вы хотите выполнять по частям.Итак,
[0;data(:,1)]
дает ожидаемый результат?Вы понимаете, что он производит?Затем задайте те же вопросы
diff([0;data(:,1)])
, а затем
diff([0;data(:,1)])> 0
и продолжайте.В какой-то момент вы обнаружите, что Matlab не делает то, что вы ожидаете - и это потому, что ваши ожидания неверны.
Наконец, одна вещь, которая определенно неверна, это то, что подвыражения diff([0;data(:,1)])> 0
и diff([0;data(:,2); 0])~= 0
создает векторы различной длины.
РЕДАКТИРОВАТЬ: Оператор &
может быть тем, что вы хотите, так как он будет работать поэлементно на двух ваших массивах.
РЕДАКТИРОВАТЬ 2 : Боюсь, у меня больше нет времени, чтобы помочь вам в этом, поэтому я предлагаю вам переписать вашу программу, чтобы явно зациклить массив данных, накапливая накопленную сумму по ходу дела.