La cosa si può fare e mi ricorda molto gli esercizi in C++ che facevo quando seguivo il corso di fondamenti di informatica all'università.
% Supponiamo tu abbia gia definito la matrice iniziale che si chiama A.
% Il secondo punto è trovare la posizione del massimo nella colonna, il suo indice.
m = max(A(:,1)); Trova il valore del massimo nella prima colonna
pos = find(A(:,1)==m); Trova la posizione del valore massimo
% Crea la prima colonna della matrice di output che chiamerò B
B=[A(pos-3,1); A(pos-2,1); A(pos-1;1); A(pos,1); A(pos+1,1); A(pos+2,1); A(pos+3,1)];
Questo va fatto per ogni colonna.
La cosa può essere resa automatica mediante il seguente ciclo for.
% Abbiamo gia definito la matrice input chiamata A,
% sia n il numero di colonne di A
% Sia B la matrice di output desiderata.
B=zeros(7,n);
% Ciclo con tutte le operazione per trovare le colonne di B
for i=1:n
m = max(A(:,i));
pos = find(A(:,i)==m;
B(:,i)=[A(pos-3,i); A(pos-2,i); A(pos-1;i); A(pos,i); A(pos+1,i); A(pos+2,i); A(pos+3,i)];
end
Ovviamente in questo caso perdi i massimi parziali di ogni colonna e alla fine dello script, m e pos conterranno valore e posizione del massimo dell'ultima colonna.
Per salvare tutti i massimi e tutte le posizioni basta dichiarare m e pos non come singola variabile ma come vettore come scritto sotto.
% Abbiamo gia definito la matrice input chiamata A,
% sia n il numero di colonne di A
% Sia B la matrice di output desiderata.
B=zeros(7,n);
% Siano m e pos i vettori che contengono tutti i massimi e tutte le posizioni parziali
m = zeros(n);
pos = zeros(n);
% le inizializzazioni di B, m e pos non sono fondamentali in MatLab (lo sono in altri linguaggi) ma ti consentono di avere un codice piu pulito e lineare e sopratutto comprensibile anche da terze persone. Inoltre l'inizializzazione dei vettori usati poi in un ciclo consente di sveltire le operazioni di MatLab.
% Ciclo con tutte le operazione per trovare le colonne di B
for i=1:n
m(i) = max(A(:,i));
pos(i) = find(A(:,i)==m;
B(:,i)=[A(pos-3,i); A(pos-2,i); A(pos-1;i); A(pos,i); A(pos+1,i); A(pos+2,i); A(pos+3,i)];
end