переход от командного окна (как скрипт) к функции - PullRequest
0 голосов
/ 02 марта 2012

программа работает отлично, но когда я изменяю ее на работоспособность, отображается следующая ошибка:

     [Parent1index, Parent1Position, alldcel] = Parent1n(TotalnoOfGrids, noOfNodes, Penalties, test)
     ??? Index exceeds matrix dimensions.

     Error in ==> Parent1n at 10
     [~,index]=min(alldcel{t});

Ответы [ 2 ]

1 голос
/ 03 марта 2012

Поскольку alldcell{t} может не существовать для некоторых значений t, если условие для присвоения ему значений в

if Penalties{t}(r)== 0;
   alldcel{t}(r)=inf;
end

никогда не устраивает. Предположим для некоторых t, что все значения Penalties{t} отличаются от нуля. Тогда вы никогда не назначите inf на alldcell{t}. Это означает, что вы расширяете массив ячеек alldcell только тогда, когда Penalties{t} равен нулю для некоторого r. Если условие никогда не выполняется, alldcell{t} не будет существовать, и запрос его приведет к ошибке массива ячеек.

Вы должны хотя бы инициализировать его, используя alldcell = cell(TotalnoOfGrids,1).

Кроме того, сравнение на равенство нулю с использованием a==0 не очень хорошая идея. Вы должны использовать abs(a)<tol для небольшого значения tol.

0 голосов
/ 03 марта 2012

хорошо с этим кодом, сработала функция: if Penalties{t}(r)> 0; alldcel {t}(r)=alldcel{t}(r); else alldcel {t}(r)=inf;, но поменялась местами, если оператор с else не

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...