Diagonale princiapale e secondaria con matlab

summer.911
Scusate il disturbo,ma io ho un rapporto conflittuale con matlab..:S

L'esercizio mi chiedeva di implementare uan funzione richiamando una matrice nxn che creasse una matrice che abbia lungo la diagonale princiapale gli elementi di quella richiamata con il segno meno,quelli sulla diagonale secondaria moltiplicati per 10.

Io ho risolto l'esercizio in qeusto modo:

function=matrice(B,n)
[n,n]=size(B);
i=0;
j=0;
for i=1:n
for j=1:n
if i==j
B(i,j)=-B(i,j);
elseif i+1=n+1
B(i,j)=10*B(i,j);
end
end
end
end


Il professore ha svolto l'esercizio in maniera molto + semplice:
[n,n]=sizeB
for i=1:n-1
B(i,i)=-B(i,i);
B(i,i+1)=10*B(i,i+1);
B(i+1,i)=10*B(i+1,i);
end
end

Ho capito il ragionamento del professore ma mi chiedevo se anke il mio procedimento è esatto!
Grazie mille anticipatamente:)

Risposte
lukul
Semplice: i due ragionamenti poretano allo stesso risultato o no?
Se si funzionano entrambi :lol:

Un piccolo consiglio: le prime due righe della tua function sono:

function=matrice(B,n)
[n,n]=size(B);

io direi di fare (se la tua matrice B è quadrata):

function=matrice(B)
n=size(B);

così eviti di dare in input la dimensione della B.

summer.911
grazie mille per il consiglio..:) mi hai rallegrato la giornata dicendomi che erano uguali!:)

Umby2
Per diagonale principale si intende quella che scende dall'alto verso il basso, e da sx verso dx ?

e la secondaria l'altra ?

è cosi' ?

summer.911
si

Umby2
"summer.91":
si


allora non mi sembra che il tuo codice sia corretto!

Pensa un po: per identificare la diagonale principale basta controllare che $i$ sia uguale a $j$

ma per la secondaria ? cosa devi fare ?

summer.911
Non lo so..:S mi sembrava un ragionamento logico quello!
i scorre e aumento a seconda dello scorrimento di 1,se avessi una matrice 2x2 ad esempio ho 1+1 e quindi mi trovo nel secondo quadrante della amtrice e ok..qesto deve essere uguale a n+1 che sarebbe il numero di righe della matrice..e farebbe 3:S non mi trovo:S

Umby2
Ragiona con una matrice un tantino piu grande, ad esempio la classica tavola pitagorica 10x10, identifica tutte le caselle della diagonale secondaria, e vedi come le coordinate "si muovono"

summer.911
le righe aumentano le colonen diminuiscono...i+1=n-1 credo è giusto?

Umby2
I due indici sono i e j. (N è la grandezza della matrice, nel mio esempio N=10)

Non capisco, come fai a scrivere del codice, quando non hai ancora stabilito come "riconoscere" gli elementi su cui operare.

IMHO: Ragiona prima, la scrittura del codice deve essere la fase finale di un ragionamento...

summer.911
scusa eh..
la mia matrice è 10x10
i= l inidce che indica el righe che variano j è quello per el colonne..se uso i che aumento di 1 per arrivare a a 10 ke sarebbe la mia N ( dimensione finale) qeusta quantità deve essere uguale a j che ho visto diminuisce di 1,..quindi teoricamente i+1==j-1 ma in qeusto caso j non può avere un for J=1:1:n poichè il pirmo elemento sarebbe poi nullo,quindi dovrei aprtire da J=2:n e mettere i+1==j-1 e modificare anke il ciclo for per i=1:n-1 poichè arrivato all ultimo passaggio s eaumento di uno andrei fuori matrice...
ok..non sto capendo + nulla!:S

Umby2
Scriviamola tutta:

[1,10]
[2,9]
[3,8]
[4,7]
[5,6]
[6,5]
[7,4]
[8,3]
[9,2]
[10,1]

La somma tra i due indici è 11 ( 11 Non è altro che N + 1):
Quindi: I + J = N + 1 ===> J = N + 1 - I

summer.911
ma anke il mio ragionamento aveva una logica...XD era del tutto sbagliato?

Umby2
"summer.91":
ma anke il mio ragionamento aveva una logica...XD era del tutto sbagliato?


quasi tutto.

ora puoi correggere il tuo codice, e puoi anche correggere quello del professore (che non mi convince molto..)

Ciao.

summer.911
Grazie mille genio..:P:P:P

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.