Упростить выражение. Записать матрицу без циклов.Matlab

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

    clear,clc;
tic
n = 1:100;
Y = sin(n);
N = length(Y);
eps = std(Y);N = length(Y);
m = 3;
q=1.3;
tic
for s = 1:N-m-1
    for t1 = s+1:N-m
        for j = 1:m
            C2(t1,j)  = abs(Y(s+(j-1))-Y(t1+(j-1)))< eps; 
        end
    tempC(s) = (sum(prod(C2,2)).^(q-1));
    end
end
toc
C = sum(tempC)^(1/(q-1));

Данный код выполняет расчет выражение представленного на рис.1введите сюда описание изображения Код работает корректно(Результаты совпадают с MathCad), однако в дальнейшем при увеличение количества данных будет занимать длительное время . Пытался с использованием функций, meshgrid, repmat... но все напрасно.

Функция I(a,b,e) - функция Хевисайда Буду благодарен за любую помощь. С уважением, В.


Ответы (1 шт):

Автор решения: Pavel Gridin

Для примера уберём самый внутренний цикл, для этого заменим j на диапазон из цикла:

clear,clc;
tic
n = 1:100;
Y = sin(n);
N = length(Y);
eps = std(Y);N = length(Y);
m = 3;
q=1.3;
tic
for s = 1:N-m-1
    for t1 = s+1:N-m
        C2(t1,1:m)  = abs(Y(s+((1:m)-1))-Y(t1+((1:m)-1)))< eps;
        tempC(s) = (sum(prod(C2,2)).^(q-1));
    end
end
toc
C = sum(tempC)^(1/(q-1));
→ Ссылка