2016-06-21 27 views
1

My Matlab ist etwas rostig, und kann nicht mit einer ordentlichen Lösung (effizient),erzeugen mehrere Sequenzen von n: n

gewünschte Ausgabe für einen gegebenen nMax kommen:

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 

(oder idealerweise seine Transponierte).


Edit: Hier ist eine Zusammenfassung des schönen Speedup mit der vorgeschlagenen Lösung,

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

Antwort

2

Try this:

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); 

Nicht sicher, wie effizient es wird sein. Aber es hat Spaß gemacht zu schreiben :-)