Aiuto per un programma sulle matrici

di il
1 risposte

Aiuto per un programma sulle matrici

Salve a tutti ho avuto un problema con un programma matlab, è molto semplice anche se essendo alle prime armi non riesco a capire dov'è l'errore. Molto semplicemente devo eseguire un programma per sommare gli elementi di una sopradiagonale di una matrice. Ho scritto questo codice ma mi da errore sulla somma... come mai?
m=input('inserire a. a=');
n=input('inserire b. b=');
A=rand(m,n);
somma=0;

if m<=n
for i=1:m
somma=somma+A(i,j=i+1);
end
else
for i=2:n
somma=somma+A(i,j=i+1);
end
end

1 Risposte

  • Re: Aiuto per un programma sulle matrici

    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]
    
    
Devi accedere o registrarti per scrivere nel forum
1 risposte