Упростить выражение. Записать матрицу без циклов.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));