Non c'è bisogno di un ciclo "for", puoi usare la funzione
diag
Se proprio vuoi usare un ciclo "for" che funzioni indipendentemente dal numero di righe e colonne, puoi regolare il numero di iterazioni considerando il valore minimo tra il numero di righe della matrice ed il numero di colonne meno uno.
Nell'esempio che segue puoi verificare le tre condizioni con matrici (13 x 10), (10 x 10) e (8 x 10) settando 1 o 0 nei tre blocchi "if" che definiscono le matrici di input.
% 13 x 10
if(1)
a=[
7 5 9 9 9 5 13 12 2 1
13 8 11 6 11 7 1 6 3 4
5 4 11 7 11 8 12 8 6 6
13 10 1 5 5 1 7 6 10 2
5 12 5 6 1 3 12 10 9 10
5 13 9 12 7 2 6 8 3 8
2 3 12 9 11 3 6 1 8 13
12 10 2 13 6 9 8 7 12 13
12 7 2 10 12 12 3 3 10 3
9 5 13 5 7 5 9 8 10 5
7 9 3 10 13 7 13 12 13 1
10 4 13 13 10 4 3 5 8 1
1 11 13 9 3 13 2 7 1 8
]
end
if(0)
% 10 x 10
a=[
6 3 2 12 13 4 6 11 7 10
11 1 10 4 1 11 2 3 6 8
5 1 4 7 8 2 6 12 2 7
7 12 1 10 9 6 11 11 8 3
3 10 10 1 1 10 10 3 3 7
7 13 10 1 11 10 5 11 9 1
12 11 3 4 13 7 7 8 5 8
1 1 1 6 7 5 12 3 4 11
5 5 13 9 13 9 1 9 9 11
1 11 2 8 1 8 7 9 11 7
]
end
if(0)
% 8 x 10
a=[
6 6 12 10 13 12 1 7 8 3
6 7 6 3 9 1 11 11 7 3
1 8 7 12 13 7 10 13 12 8
1 9 3 1 12 13 7 11 4 10
10 4 2 12 8 6 7 6 4 9
10 4 3 2 9 6 3 8 8 13
9 7 6 6 10 1 12 5 1 2
2 4 4 8 6 5 5 1 5 9
]
end
d1=diag(a,1)
somma1=sum(diag(a,1))
[r,c]=size(a)
d2=[]
somma2=0;
for i=1:min([c-1,r])
d2=[d2;a(i,i+1)];
somma2=somma2+a(i,i+1);
end
[d1 d2]
[somma1 somma2]