Почему MATLAB сообщает о моей переменной неинициализированной? - PullRequest
1 голос
/ 23 марта 2009

Я создал класс, и в одном из его методов мне нужно было вычислить расстояние между двумя точками. Поэтому я написал обычную функцию под названием «удаленность», чтобы сделать это для меня.

Ошибка компиляции:

При компиляции "удаленность" была определяется как переменная, и это переменная неинициализирована. «удаленность» также является именем функции и предыдущие версии MATLAB вызвали функцию.

Однако MATLAB 7 запрещает использование одного и того же имени в том же контексте, что и функция и переменная.

Ошибка в ==> TRobot> TRobot.makeVisibilityGraph на 58 obj.visiblityGraph (k, k + 1) = удаленность (:, obj.VGVertices (k), obj.VGVertices (:, k + 1));

Я думал, что имя remoteness может быть именем другой функции, но когда я изменил ее имя на kamran, ошибка не исчезла. Следует отметить, что я могу без проблем использовать функцию kamran (или remoteness) в командной строке.

Пример командной строки:

>> kamran([0,0],[3,4])

ans = 5

Код функции kamran находится в отдельном файле m.

Код для kamran функции:

function dist = kamran(v1,v2)
    dist = sqrt(    (v1(1) - v2(1)) ^2  + (v1(2) - v2(2)) ^2   );

Пример кода для использования функции kamran:

function obj = makeVisibilityGraph(obj)
          verticesNumber = 0; 
          for num = 1: size(obj.staticObstacle,2)
              verticesNumber = verticesNumber + size(obj.staticObstacle(num).polygon,2);
          end
          % in the below line, 2 is for start and goal vertices
           obj.visibilityGraph = ones(2 + size(obj.VGVertices,2)) * Inf;
           for j=1 : size(obj.staticObstacle,2)
              index = size(obj.VGVertices,2);
              obj.VGVertices = [obj.VGVertices, obj.staticObstacle(j).polygon];
              obj.labelVGVertices = [obj.labelVGVertices, ones(1,size(obj.staticObstacle(j).polygon,2))* j ];
              for k = index+1 : (size(obj.VGVertices,2)-1)
                  obj.visiblityGraph(k,k+1) = kamran(:,obj.VGVertices(k),obj.VGVertices(:,k+1));
              end
%             as the first and last point of a polygon are visible to each
%             other, so set them visible to each other
              obj.visibilityGraph(index+1,size(obj.VGVertices,2)) = ...
                               kamran( obj.VGVertices(:,index+1), obj.VGVertices(:,size(obj.VGVertices,2)));
           end     


end

Ответы [ 2 ]

4 голосов
/ 23 марта 2009

Вы, похоже, пытаетесь использовать kamran в качестве массива:

 kamran(:,obj.VGVertices(k),obj.VGVertices(:,k+1));

Обратите внимание на первый параметр ":"?

Держу пари, что MATLAB предполагает, что kamran (как здесь называется) должен быть трехмерным массивом, и вы пытаетесь выбрать подмножество, содержащее

kamran(all-of-first-index, Nth-of-second, Mth-of-third)

Второй вызов kamran выглядит правильно:

kamran( obj.VGVertices(:,index+1), obj.VGVertices(:,size(obj.VGVertices,2))
0 голосов
/ 23 марта 2009

Я не знаю MATLAB, но я заметил, что в этой строке вы запускаете kamran с тем, что выглядит как 3 аргумента. Во всех остальных случаях он выполняется с двумя аргументами. Может быть, в этом что-то есть?

  kamran(:,obj.VGVertices(k),obj.VGVertices(:,k+1));              
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...