2016-06-21 2 views
1

Мой Matlab является немного ржавый, и я не могу придумать с аккуратным раствором (эффективной),генерировать множество последовательностей -n: п

Желаемая выход для данного Nmax:

nMax = 3; 
mn = cell2mat(arrayfun(@(n) [(-n:n) ;(-n:n)*0+n], 1:nMax, 'UniformOutput', false)); 
mn = 

-1  0  1 -2 -1  0  1  2 -3 -2 -1  0  1  2  3 
1  1  1  2  2  2  2  2  3  3  3  3  3  3  3 

(или, в идеале, его транспонирование).


Edit: здесь это резюме прекрасного ускорения с предлагаемым решением,

tN = [5:100, 200:50:1000]; 
for ii=1:length(tN) 
f1 = @() f_mn(tN(ii)); 
f2 = @() f_mn2(tN(ii)); 
gain(ii) = timeit(f1)/timeit(f2); 
end 

enter image description here

ответ

2

Попробуйте это:

nMax = 3; 
u = nMax^2+2*nMax; 
mn = [ ones(u, 1) zeros(u, 1) ]; 
vv = 1:nMax; 
ww = vv.^2; 
mn(ww, 1) = -2*vv+1; 
mn(ww, 2) = 1; 
mn = cumsum(mn, 1); 

Не уверен, насколько он эффективен будет. Но было весело писать :-)

Смежные вопросы