Citat:
gogi100:
nasao sam neki kod ali mi ne odradjuje bas kako ocekujem
Code:
A = [1 2 2 9; 4 5 1 8; 3 1 1 1; 5.3 5 1.8 7]
A_unique = unique(tril(A, -1))
FLAG = false;
for ii = 1:length(A(1,:))
for jj = ii+1:length(A(1,:))
if (length(A_unique) == length(unique([A_unique; A(ii,jj)])))
display(A(ii,jj))
FLAG = true;
break;
end
end
if FLAG
break;
end
end
ocekujem da mi prvi duplikat koji nadje iznad glavne dijagonale bude 2, a on nalazi 1
zasto?
Pojasnicu ti sta radi kod kog si nasao, a onda i zasto nalazi 1.
Pre svega funkcija
tril u datoj matrici ocuva vrednosti koje se nalaze na i
ispod dijagonale koja je zadata drugim parametrom. Sve ostale vrednosti u prosledjenoj matrici anulira. Da napomenem, ako prosledis 0 radi se o glavnoj dijagonali, ako prosledis -1 radi se o dijagonali odmah ispod glavne, 1 je za dijagonalu odmah iznad glavne, itd. Da bi ti bilo jasnije, posle ove funkcije, tvoja matrica A ce izgledati ovako:
0 0 0 0
4 0 0 0
3 1 0 0
5.3 5 1.8 0
unique ima za cilj da prodje kroz prosledjeni niz/matricu, i da izbaci sve duplikate. Nakon sto si funkciji
unique prosledio matricu koju sam ti navela iznad, u A_unique ces dobiti niz od sledecih elemenata: 0, 4, 3, 1, 5.3, 5, 1.8.
One dve ugnjezdene petlje ce ti proci kroz
gornji "deo" matrice. Ideja je da se za svaki taj element uradi unija sa nizom A_unique, nakon cega se ponovo poziva
unique funkcija nad pomenutom unijom. Ukoliko novi element nije bio u nizu A_unique, nakon ponovne primene
unique funkcije duzina novodobijenog niza ce biti za jedan veca od duzine niza A_unique. U suprotnom, ukoliko je element duplikat on ce se nakon ponovne primene
unique funkcije izbaciti (jer unique funkcija izbacuje duplikate), te ce duzina novodobijenog niza biti ista kao duzina niza A_unique, i to ce znaciti da smo naisli na duplikat. (to ti upravo govori ovaj uslov: if (length(A_unique) == length(unique([A_unique; A(ii,jj)])))).
Hajdemo sad korak po korak, da bi shvatio zasto ti nalazi 1. Rekoh da ove dve ugnjezdene petlje iteriraju kroz elemente iznad glavne dijagonale matrice, i isto tako smo zakljucili da A_unique niz u sebi ima elemente 0, 4, 3, 1, 5.3, 5, 1.8. Element prve iteracije petlji je 2. 2 se ne nalazi u nizu A_unique, pa idemo dalje. Sledeci element je takodje 2. Opet vazi kao i malopre, jer se 2 ne nalazi u A_unique. Sledeci je 9, za kog opet vazi isto. Nakon toga dolazi 1 - jedinica se nalazi u A_unique, i on shvata da je naisao na duplikat.
Dakle, mozes da zakljucis da tvoj program nalazi element iz "gornjeg" dela matrice koji se istovremeno nalazi u "donjem" delu matrice.
EDIT: Izmenila sam poslednji deo poruke koji je nosio skroz pogresan zakljucak. Ovo iznad i dalje stoji, te sam to ostavila.
[Ovu poruku je menjao tuolarips dana 22.01.2014. u 22:57 GMT+1]
"Time is a drug. Too much of it kills you." Terry Pratchett