Мне непонятно, как вы пытаетесь сделать это здесь (расстояние Джакарта требует двух входов, неясно, каковы ваши входные данные), но в любом случае у вас здесь есть синтаксические ошибки.
Для начала, у вас есть несбалансированные скобки в вашей функции 'max' (предположительно, это должно быть max((Y-Y(1,:)), ...
, а не max(Y-Y(1,:))
(обратите внимание на одну открывающую скобку), которая завершает вызов функции. Тот факт, что вы ' использование большого количества лишних скобок и плохой стиль отступов / интервалов затрудняет их обнаружение. Например, лучший способ написать это (чисто визуально) может быть:
m = 1 - [ sum( min( Y - Y(1,:), ...
Y - Y(2,:), ...
Y - Y(3,:) ), 3 ) ...
/ ...
sum( max( Y - Y(1,:), ...
Y - Y(2,:), ...
Y - Y(3,:) ), 3 ) ...
];
Или, что еще лучше, запишите промежуточные результаты в значимые имена промежуточных переменных, чтобы ваш код читался как английский, и его было легче отслеживать и отлаживать, т. Е.
VectorOfMinima = min( Y - Y(1,:), Y - Y(2,:), Y - Y(3,:) );
VectorOfMaxima = max( Y - Y(1,:), Y - Y(2,:), Y - Y(3,:) );
SumOfMinima = sum( VectorOfMinima, 3);
SumOfMaxima = sum( VectorOfMaxima, 3);
Jaccard = 1 - ( SumOfMinima / SumOfMaxima );
Сказав все это, вы все равно неправильно используете min
и max
. Я не совсем уверен, чего вы хотите достичь, но эффективно min
(и max
соответственно) можно использовать только в форме min(X, [], DIM)
, которая определяет, по какому измерению получать минимумы для матрицы X
, или min(X, Y)
, который возвращает новую матрицу с минимумом X или Y в каждой позиции. Вы фактически звоните min
как min(X, Y, Z)
, что не является допустимым вызовом для min
.