Функция цикла в программировании Matlab - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь сделать цикл, как описано ниже в программировании Matlab. Ему нравится исследование двух деревьев.

Задача 1:

Я создаю функцию с двумя входными переменными и выводу с четырьмя переменными.

From originCoord (x, y, z) создает две новые координаты R (x, y, z), L (x, y, z);(R означает справа, L: слева)

следующий R (x, y, z) -> новые R1 (x1, y1, z1) & L1 (x1, y1, z1) и L (x, y, z) -> новый L2 (x2, y2, z2) & R2 (x2, y2, z2)

, после чего продолжение .....

цикл остановится, когда один изnewCcoordinates () == targetCoordinates (xtarget, ytarget).

%from initial 3D point (x y z) using treeExploreation fuction to create two 
%new3D points with coordinates (x1,y1,z1) and (x2,y2,z2)
%then from these new point, using this function two create new four 3D_Points...
%x y z are scala
rightPoint = [x1,y1,z1];
leftPoint = [x2,y2,z2];
targetPoint = [xtarget, ytarget, ztarget]; 

%store twop 3D points into coordExplore
coordExplore = [rightPoint,leftPoint];

temp = [];
flag = 0;
while (~flag)

    for i=1:length(coordExplore)
        [newrightPoint,newleftPoint]=treeExploration(coordExplore(i)); %help me at here !!!!
        %this function with input (x,y,z) output two new coordinates i.e.
        % newrightPoint(x3,y3,z3) and newleftPoint(x4,y4,z4)  

    if (newrightPoint==targetPoint) || (newleftPoint==targetPoint)
        %this condition is to compare the output coordinates whether the same as 
        %the targetPoint
        flag=1;
        break;
    else
        temp =[newrightPoint,newleftPoint];
    end    
    end

    coordExplore = temp;
    temp = [];
end

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

Обновлены проблемы :

* Я хотел бы ordExplore (1) = rightPoint (x1 y1 z1)

иordinExplore (2) = leftPoint(x2 y2 z2)

НО с индексом i = 1 ,ordinExplore (1) = x1;i = 2 - >ordinExplore (2) = y1;

Я использую цикл сordinExplore (i), чтобы работать от точки к точке, в каждой точке есть свои координаты (xyz). Как я могу это сделать? *

Проблема 2: когда один из newCcoordinates () == targetCoordinates (xtarget, ytarget), как я могу узнать, какие вариабельные значения в каком направлении от исходного цикла допоследний цикл, генерирующий результат? (например, какие марки дерева достигают цели). В C ++ я могу использовать стек для сохранения, но в Matlab я не знаю, как сохранить переменную для каждого цикла.

1 Ответ

0 голосов
/ 14 октября 2019

Проблема 1: Если я правильно понял, чего вы хотите достичь, что-то подобное должно сделать эту работу.

reached_target = False;
coord = [x, y];

while ~reached_target
    number_of_nodes = size(coord, 1)
    new_coord = zeros(2*number_of_nodes)
    for ii = 1:number_of_nodes
        new_coord(ii*2-1, :) = doRightRunning(coord(ii, 1);
        new_coord(ii*2, :) = doLeftRunning(coord(ii, 2);
    end
    target_ind = new_coord(:, 1) == x_target && new_coord(:, 2) == y_target;
    if any(target_ind)
        reached_target = True;
        disp(find(target_ind));
    end
end 

Однако показанный вами код не соответствует вашим объяснениям, поэтому неясно, будет ли следующий слой дерева в 2 или 4 раза больше предыдущего.

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

Проблема 2: Нет необходимости сохранять след, чтобы знать о поворотах, которые он совершил, чтобы достичь цели. Когда совпадающая координата найдена, ее место в списке координат показывает ее след. Все, что вам нужно сделать, это преобразовать его индекс в двоичный код и интерпретировать 0 как правый поворот и 1 как левый поворот (поскольку в коде правый поворот размещается сверху, а левый - снизу).

Пример. Допустим, мы находимся в 3-м слое дерева с 8-ю координатами и, скажем, 6-я координата соответствует цели. Итак, начиная с индекса 0, мы нашли совпадение с индексом 101 в двоичном формате. Это показывает, что повороты для достижения этой координаты левые-правые-левые.

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