Вызов функции из вложенного цикла for в MATLAB - PullRequest
0 голосов
/ 01 июня 2018

У меня возникла небольшая проблема с вызовом моих функций внутри моих вложенных циклов for, и мне было интересно, если кто-нибудь сможет это выяснить ...

new_location = 50x2 матрица местоположений ячеек * 0.1

B = 150x150 матрица рандовых значений

for j = 1:numel(new_location(:,1)) 
    for k = 1:numel(new_location(:,2))
    if new_location(j + 1) - new_location(j) < 0.3
       final_location = check_intensity(B(j),B(j + 1),new_location(j),new_location(j + 1));
    else if new_location(k + 1) - new_location(k) < 0.3
       final_location = check_intensity_2(B(k),B(k + 1),new_location(k),new_location(k + 1));
        else
            ;
        end
    end
    end
end

Пользовательские функции:

function final_location = check_intensity(B(j),B(j + 1),new_location(j),new_location(j + 1))
if B(j) > B(j + 1)
    final_location(j) = new_location(j);
else
    final_location(j) = new_location(j + 1);
end

Моя ошибка просто говорит:

Ошибка: Файл: check_intensity.m Строка: 1 Столбец: 44 Несбалансированные или неожиданные скобки или скобки.

Ошибка вordin_1_sb (строка 36) final_location = check_intensity (B (j), B (j + 1), new_location (j), new_location (j + 1));

1 Ответ

0 голосов
/ 01 июня 2018

Это потому, что вы должны ввести имена входных аргументов в этой позиции.Так что check_intensity(B(j),B(j + 1),new_location(j),new_location(j + 1)) в основном правильно, когда вы вызываете функцию, а не при определении функции.Правильный путь - использовать простые имена переменных при определении функции, например check_intensity(x,y,new_loc1,new_loc2).Это должно решить вашу проблему.Таким образом, ваша пользовательская функция будет выглядеть так:

function final_location = check_intensity(x,y,new_loc1,new_loc2,j)
    if x > y
        final_location = new_loc1;
    else
        final_location = new_loc2;
    end
...