PDA

View Full Version : Aiuto Matlab: sottomatrici


dindog
13-06-2012, 18:36
Ciao a tutti!
Ho una matrice con diverse colonne, e con diversi valori:
es.
1.16 -0.656 -1.526 1.16
1.2 -1.74 -0.671 1.2
1.24 -0.336 0.717 1.24
1.28 -0.412 9.153 1.28
1.32 1.358 0.656 1.32
1.36 -0.137 -0.153 1.36
6.4 0.778 -0.992 1.4
1.44 -1.175 -0.626 1.44
1.48 -0.732 0.305 1.48
1.52 -1.175 -1.175 1.52
1.56 2.824 1.297 1.56
1.6 -0.732 0.305 7.6
1.64 0.153 0.61 5.64
1.68 0.336 1.205 1.68
1.72 0.9 1.099 1.72

Per ogni colonna vorrei definire una sottomatrice che comprenda i 3 valori che precedono il valore massimo, il valore massimo ed i 3 valori successivi. Questo per ogni colonna.
Nell'esempio, quindi, la sottomatrice dovrebbe restituirmi:
1.28 -1.175 -1.526 1.48
1.32 -0.732 -0.671 1.52
1.36 -1.175 0.717 1.56
6.4 2.824 9.153 7.6
1.44 -0.732 0.656 5.64
1.48 0.153 -0.153 1.68
1.52 0.336 -0.992 1.72

Si può fare?
Ale

dindog
14-06-2012, 10:08
Mi spiace ma non mi funziona il ciclo for. Mi appare:

Expression or statement is incorrect--possibly unbalanced (, {, or [.
E fa riferimento alla riga:
[~, max_idx] = max( input_matrix(:,ii) )

Why?
A.



[n_rows, n_cols] = size( input_matrix );
output_matrix = zeros(3+1+3,n_cols);
for ii=1:n_cols

[~, max_idx] = max( input_matrix(:,ii) );
output_matrix(:,ii) = input_matrix( max_idx-3:max_idx+3, ii);

end

dindog
14-06-2012, 12:49
Purtroppo stesso errore...
al posto di input_matrix ho scritto il nome della mia matrice, quindi

[n_rows, n_cols] = size( a1 );
output_matrix = zeros(3+1+3,n_cols);
for ii=1:n_cols
[~, max_idx] = max( a1(:,ii) );
e così via.

In realtà l'errore che mi da è lo stesso, per la stessa riga...

??? Error: File: provaa.m Line: 13 (corrisponde a: [~, max_idx] = max( a1(:,ii) );) Column: 3
Expression or statement is incorrect--possibly unbalanced (, {, or [.

Ma cosa serve la linea [~, max_idx] = max( a1(:,ii) );? Non si può scrivere diversamente?
Io ho Matlab2008b, potrebbe essere un problema legato alla versione?

Grazie Antonio.
Ale

ADDENDUM
Ho fatto una prova.
Ho inserito la matrice:
2 20 60
3 30 90
4 40 120
5 120 150
6 60 480
70 70 210
8 80 240
9 90 270
10 100 300

e sostituito la riga
[~, max_idx] = max( input_matrix(:,ii) );
con
max_idx = max( a1(:,ii) );

Risultato:
output matrix:
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

...?

dindog
18-06-2012, 19:52
Perfetto, grazie!
Ale