Git статус не работает правильно [закрыто]

Индексы индексов должны быть либо натуральными целыми числами, либо логическими

. Почти во всех случаях эта ошибка вызвана одной из двух причин. К счастью, для этого есть простая проверка.

Прежде всего убедитесь, что вы находитесь на линии, где происходит ошибка, этого обычно можно достичь, используя dbstop if error, прежде чем запускать свою функцию или скрипт. Теперь мы можем проверить первую проблему:

1. Где-то недопустимый индекс используется для доступа к переменной

. Найти каждую переменную и посмотреть, как они индексируются. Индексируемая переменная обычно находится в одной из следующих форм:

variableName(index,index)
variableName{index,index}
variableName{indices}(indices)

Теперь просто посмотрите на материал между скобками и выберите каждый индекс. Затем нажмите f9, чтобы оценить результат и проверить, является ли оно реальным положительным целым или логическим. Визуальный осмотр обычно достаточен (помните, что допустимые значения находятся в true, false или 1,2,3, ... BUT NOT 0), но для большой матрицы вы можете использовать такие вещи, как isequal(index, round(index)) или более точно isequal(x, max(1,round(abs(x)))) для проверки действительных натуральных чисел. Чтобы проверить класс, вы можете использовать class(index), который должен возвращать «логический», если все значения являются «истинными» или «ложными».

Обязательно проверьте каждый индекс, даже те, которые выглядят необычно, как в примере ниже. Если все индексы проверяются, вы, вероятно, сталкиваетесь со второй проблемой:

2. Имя функции было омрачено определенной пользователем переменной

. Функции MATLAB часто имеют очень интуитивные имена. Это удобно, но иногда приводит к случайным перегрузкам (встроенным) функциям, т. Е. Созданию переменной с тем же именем, что и функция, например, вы можете пойти max = 9, а для остальной части вашего скрипта / функции Matlab рассмотрит max как вместо переменной max вместо переменной max вы получите эту ошибку, если вы попробуете что-то вроде max([1 8 0 3 7]), потому что вместо возврата максимального значения этого вектора Matlab теперь предполагает, что вы пытаетесь индексировать переменную max и 0 является недопустимым индексом.

Чтобы проверить, какие переменные у вас есть, вы можете посмотреть рабочее пространство. Однако, если вы ищете системный подход, здесь один:

Для каждой буквы или слова, за которым следуют скобки (), и не подтверждено, что на шаге 1 указаны правильные индексы. Проверьте, фактически переменная. Это можно легко сделать, используя which.


Примеры

Простое появление недопустимого индекса

a = 1;
b = 2;
c = 3;
a(b/c)

Здесь мы будем оценивать b/c и найдите, что это не очень округленное число.

Сложное появление недопустимого индекса

a = 1;
b = 2;
c = 3;
d = 1:10;
a(b+mean(d(cell2mat({b}):c)))

Я рекомендую работать наизнанку. Поэтому сначала оцените индексирование самой внутренней переменной: d. Оказывается, cell2mat({b}):c хорошо оценивает целые числа. Затем оцените b+mean(d(cell2mat({b}):c)) и найдем, что у нас нет целочисленного или логического индекса в a.

Здесь мы будем оценивать b/c и находим, что это не очень округленное число.

Перегрузка функции

which mean 
% some directory\filename.m

Вы должны увидеть что-то подобное, чтобы фактически подтвердить, что что-то является функцией.

a = 1:4;
b=0:0.1:1;
mean(a) = 2.5;
mean(b);

Здесь мы видим, что mean случайно назначен. Теперь мы получаем:

which mean
% mean is a variable.
-8
задан Q Liu 12 June 2014 в 23:53
поделиться