Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Matlab problem oko sortiranja elemenata vektora

[es] :: Matematika :: Matlab problem oko sortiranja elemenata vektora

[ Pregleda: 3375 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Trantor

Član broj: 100930
Poruke: 275
*.dynamic.isp.telekom.rs.

ICQ: 199139277


Profil

icon Matlab problem oko sortiranja elemenata vektora05.01.2011. u 21:43 - pre 162 meseci
Pozdrav,

U Matlab-u treba za seminarski da napišem funkciju koja će da sortira elemente vektora proizvoljne dužine od najvećeg ka njamanje. Ovo treba da se uradi bez ugrađivanja funkcija sort, max i min. Znači treba da se napiše programčić. Da li neko zna kako se ovo radi? Ubi se tražeći ali nigde ne mogu da nađem. Još mi je samo taj zadatak ostao.

Hvala
The truth is out there and I want to believe.
 
Odgovor na temu

RMAN
Milan Đukić
student
Knićanin

Član broj: 32492
Poruke: 1166
*.static.zrlocal.net.



+5 Profil

icon Re: Matlab problem oko sortiranja elemenata vektora05.01.2011. u 23:00 - pre 162 meseci
Nisam dugo radio u matlab-u pa sam zaboravio sintaksu, ali to bi trebalo da je lagan posao.

Samo malo treba da mućneš glavom.
Eureka!

MILAN DJUKIC
D J U K A
 
Odgovor na temu

atomant
Beograd

Član broj: 47540
Poruke: 263
*.dynamic.isp.telekom.rs.



+34 Profil

icon Re: Matlab problem oko sortiranja elemenata vektora05.01.2011. u 23:34 - pre 161 meseci
Evo ti nesto pisano za 2 minuta. Moze efikasnije, ali ti to neces primetiti jer ne radis sa veoma dugim nizovima.

Code:
function sortirani_niz=sortiranje(niz)
    M=length(niz); radi=1;
    while(radi)
        radi=0;
        for i=1:M-1
            if(niz(i)<niz(i+1))
                temp=niz(i);
                niz(i)=niz(i+1);
                niz(i+1)=temp;
                radi=1;
            end
        end
    end
    sortirani_niz=niz;
end



Nadam se da znas kako se radi sa funkcijama u MATLAB-u (kada cuvas fajl, funkcija mora da se zove ime_funkcije.m, tj. u ovom slucaju sortiranje.m)
Napravi neki vektor A i samo ga pokreni npr ovako: sortirani=sortiranje(A);

[Ovu poruku je menjao atomant dana 06.01.2011. u 00:46 GMT+1]
If you can't explain it simply, you don't understand it well enough. A. Einstein
 
Odgovor na temu

Trantor

Član broj: 100930
Poruke: 275
*.dynamic.isp.telekom.rs.

ICQ: 199139277


Profil

icon Re: Matlab problem oko sortiranja elemenata vektora06.01.2011. u 00:49 - pre 161 meseci
Hm nije mi iz nekog razloga uspelo. Prekopirao sam ovaj tvoj kod i snimio ga kao što si ti reko kao sortiranje.m. Napravio vektor i evo kakav sam odziv dobio:

Code:

>> A=[1,7,3,5,9,11,8]

A =

     1     7     3     5     9    11     8

>> sortirani=sortiranje(A)
??? Attempt to execute SCRIPT sortiranje as a function:
C:\Users\Ivan\Desktop\sortiranje.m

The truth is out there and I want to believe.
 
Odgovor na temu

atomant
Beograd

Član broj: 47540
Poruke: 263
*.dynamic.isp.telekom.rs.



+34 Profil

icon Re: Matlab problem oko sortiranja elemenata vektora06.01.2011. u 01:08 - pre 161 meseci
Hm, zasto?


Evo ti fajl sortiranje.m

Sad samo pozovi funkciju i vidi da li radi.
If you can't explain it simply, you don't understand it well enough. A. Einstein
Prikačeni fajlovi
 
Odgovor na temu

Trantor

Član broj: 100930
Poruke: 275
*.dynamic.isp.telekom.rs.

ICQ: 199139277


Profil

icon Re: Matlab problem oko sortiranja elemenata vektora06.01.2011. u 11:36 - pre 161 meseci
Opet ista stvar. Evo ti link za mali video koji sam snimio kako sam ja to uradio. Možda vidiš šta ja to radim pogrešno.

http://rapidshare.com/files/441085381/Matlab.AVI

Pozdrav
The truth is out there and I want to believe.
 
Odgovor na temu

atomant
Beograd

Član broj: 47540
Poruke: 263
*.dynamic.isp.telekom.rs.



+34 Profil

icon Re: Matlab problem oko sortiranja elemenata vektora06.01.2011. u 14:04 - pre 161 meseci
Ono sto ti pokusavas jeste da pokrenes funkciju iz .mat fajla a to nikako nije isto sto i .m fajl.

Skini ovaj m fajl koji sam ti poslao i otvori ga u editoru da vidis kako izgleda. Kao obican tekstualni fajl. Mat fajl je nesto drugo, to je binarni fajl u koji izvozis sadrzaje vektora, matrica itd iz MATLAB-ovog Workspace-a.

Druga vazna stvar je da funkcija mora da se nalazi u istom direktorijumu u kojem je ostatak programa koji je poziva. Posto u tvom slucaju ti funkciju pozivas iz komandnog prozora a ne iz nekog drugog m fajla, funkcija sortiranje.m mora da se nalazi u trenutno aktivnom direktorijumu (ono gore u centru matlabovog prozora Current Folder mora da pokazuje na direktorijum gde se funkcija nalazi).

Posto vidim da ti bas i ne ide, to sve moze da se odradi preko skripta, ali onda nije funkcija.


Code:
niz=[1,7,3,5,9,11,8];
M=length(niz); radi=1;
while(radi)
    radi=0;
    for i=1:M-1
        if(niz(i)<niz(i+1))
            temp=niz(i);
            niz(i)=niz(i+1);
            niz(i+1)=temp;
            radi=1;
        end
    end
end
display(niz);



Ovo mozes direktno da ubacis u Command Window i da dobijes izlaz, ali ako ti se trazi da napises funkciju to nije resenje. Resenje je ono sto sam ti gore napisao.
If you can't explain it simply, you don't understand it well enough. A. Einstein
 
Odgovor na temu

Trantor

Član broj: 100930
Poruke: 275
*.dynamic.isp.telekom.rs.

ICQ: 199139277


Profil

icon Re: Matlab problem oko sortiranja elemenata vektora06.01.2011. u 16:55 - pre 161 meseci
E druže puno ti hvala!! Konačno sam uspeo da pokrenem ovu funkciju. Imao sam dve greške jedna je moja druga je tvoja :) Moja je što nisam snimio funkciju u radni direktorijum kao što si ti rekao. To nisam ni znao da treba. Tvoja greška je što funkciju nisi stavio u uglaste zagrade. Evo koda:

Code:

function sortirani_niz=sortiranje(niz) /* sortirani_niz mora u uglaste zagrade!! */
    M=length(niz); radi=1;
    while(radi)
        radi=0;
        for i=1:M-1
            if(niz(i)<niz(i+1))
                temp=niz(i);
                niz(i)=niz(i+1);
                niz(i+1)=temp;
                radi=1;
            end
        end
    end
    sortirani_niz=niz;
end


To sam slučeno našo guglajući po netu da treba da bude u uglastim zagradama. U svakom slučaju puno ti hvala to je definitivno ono što meni treba!!! E sad imam jednu malu molbu ako ti nije problem. Da li bi mogao da mi opišeš ovaj kod u par rečenica jer će profa sigurno da me pita koja je logika programa a ja baš nemam veze kako ovo radi. Samo znam da radi ono što treba :)))

Pozdrav
The truth is out there and I want to believe.
 
Odgovor na temu

atomant
Beograd

Član broj: 47540
Poruke: 263
*.dynamic.isp.telekom.rs.



+34 Profil

icon Re: Matlab problem oko sortiranja elemenata vektora06.01.2011. u 17:58 - pre 161 meseci
Ne mora kada funkcija vraca jedan argument, kada vraca vise to ide u uglastim :)
Meni radi i onako.
If you can't explain it simply, you don't understand it well enough. A. Einstein
 
Odgovor na temu

Trantor

Član broj: 100930
Poruke: 275
*.dynamic.isp.telekom.rs.

ICQ: 199139277


Profil

icon Re: Matlab problem oko sortiranja elemenata vektora07.01.2011. u 15:22 - pre 161 meseci
OK nije ni važno. Važno je da radi :)
Nego dali bi mogo da mi opišeš ovaj program u par rečenica ako ti nije problem?
The truth is out there and I want to believe.
 
Odgovor na temu

h4su

Član broj: 146153
Poruke: 162
77.238.218.*



+4 Profil

icon Re: Matlab problem oko sortiranja elemenata vektora07.01.2011. u 16:34 - pre 161 meseci
Citat:
Trantor: OK nije ni važno. Važno je da radi :)
Nego dali bi mogo da mi opišeš ovaj program u par rečenica ako ti nije problem?


Evo ukratko provjerava u parovima clanove niza, ako je i-ti manji od i+1 zamjeni im mjesta.Eto.Nece te ubiti da
analiziras malo kod naucis kako radi for,if, while.Ako sta nije jasno pitaj :D.


 
Odgovor na temu

Trantor

Član broj: 100930
Poruke: 275
*.dynamic.isp.telekom.rs.

ICQ: 199139277


Profil

icon Re: Matlab problem oko sortiranja elemenata vektora07.01.2011. u 20:36 - pre 161 meseci
h4su:

Ajd da probam :)

Code:

function sortirani_niz=sortiranje(niz)   /* Deklariše funkciju čiji je ulaz "sortiranje (niz)" a izlaz "sortirani_niz" */
    M=length(niz);      /* Predstavlja promenljivu koja sadrži podatak o broju elemenata vektora */
    radi=1;           /* Inicira kontrolnu varijablu "radi" na vrednost 1 i ona služi da prekine "while" kada broj poređenja dostigne "M-1" poređenja */
    while(radi)         /* Započinje petlja "while" i izvršava se sve dok je promeljiva "radi" jednaka 1 */
        radi=0;  /* Setuje kontrolnu varijablu "radi" na 0 kako bi onemogućili ponovno izvršavanje "while" petlje ako uslov iz "if petlje nije zadovoljen* /
        for i=1:M-1 /* Inkrementuje promeljivu "i" za jedan u svakom izvršavanju "for" petlje sve dok "i" ne postane "i = M-1" */
            if(niz(i)<niz(i+1)) /* Proverava da li je prethodni element niza (vektora) manji od narednog */
                temp=niz(i);   /* Ako je prethodni uslov ispunjen onda dedeljuje vrednost i-tog elementa niza promeljivoj "temp" */
                niz(i)=niz(i+1);  /* Dodeljuje i-tom elementu niza vrednost (i+1)-og elementa */
                niz(i+1)=temp;/* Dodeljuje vrednost promeljive "temp" (i+1)-om elementu i na taj način je izvršena rokada mesta ova dva elementa */
                radi=1;     /* Ponovo se dodeljuje vrednost jedan promeljivoj "radi" kako bismo ponovo mogli da uđemo u "while" petlju */
            end    /* Kraj "if" petlje */
        end        /* Kraj "for" petlje */
    end            /* Kraj "while" petlje */
    sortirani_niz=niz;  /* Dodeljuje izlazu funkcije "sortirani_niz" niz koji predstavlja sortirane elemente vektora */
end   /* Kraj funkcije */


Ako je ovo objašnjenje u redu onda extra :))) E sad pored toga ja imam dva pitanja:

1. Ovaj program upoređuje brojeve u parovima. Što znači: prvi i drugi, drugi i treći,... To je u redu on će lepo da sortira recimo prvi i drugi ali kako će on ova dva elementa da dovede u vezu za recimo sedmim i osmim ili petim i šestim jer koliko se meni čini ovo poređenje se vrši u parovima nezavisno od prethodnog ili sledećeg para. Da bi ovo radilo po mojoj logici program bi morao da ima mogućnost da se vraća unazad pa kad sortira neka dva para može da se vrati nazad i na osnovu tog rezultata ispravi prethodno sortiranje što mi ne deluje vrlo verovatno.

2. Ako sam ja u pravu promeljiva "radi" služi samo da prekine petlju "while" praktično joj kaže koliko puta treba se izvrši. Pošto program čim uđe u "while" petlju setuje "radi" na 0 logično je da bi se ova petlja posle toga ponovo izvršila potrebno je ponovo vratiti "radi" na 0. Što je u ovom programu i urađeno ali mi nije jasno mesto gde se ponovo promeljiva "radi" dovodi na 1. Valjda treba da se dodeli posle petlej "if" a ne u njoj jer koliko će puta da se izvrši petlja "while" ne zavisi od "if" uslova nego od "for" uslova. Sve dok je i=<M-1 "while" petlja treba se izvršava. Što znači da "radi=1;" treba da se nalazi u okviru "for" uslova a van "if" uslova.

Ovaj program definitivno radi ali eto ove dve stvari mi još nisu jasne pod uslovom da je moj opis gore tačan.

[Ovu poruku je menjao Trantor dana 07.01.2011. u 21:54 GMT+1]
The truth is out there and I want to believe.
 
Odgovor na temu

atomant
Beograd

Član broj: 47540
Poruke: 263
*.dynamic.isp.telekom.rs.



+34 Profil

icon Re: Matlab problem oko sortiranja elemenata vektora07.01.2011. u 21:34 - pre 161 meseci
while ciklus ce se izvrsavati dok je radi postavljen na 1.

Cim se udje u while radi se postavi na nulu, i ako se ne izvrsi nijedna zamena mesta radi ce ostati na 0 i program ce se zavrsiti. Ako se pak izvrsi razmena mesta neka 2 broja radi ce se postaviti na 1 i to ce znaciti da je nesto obavljeno u tom koraku i vrsice se jos jedan korak (sve dotle dok se nesto radi, tj dok niz nije sortiran). Ovo while mu sluzi da kad jednom izvrti for petlju ponovo krene da vrti for jos jednom. I da, u pravu si, porede se 2 po 2 elementa. Pusti ga da radi u debageru pa ces videti kako radi. Razmeni 2 elementa, pa nastavi dalje kroz niz, ako je potrebno razmeni jos 2 elementa, pa nastavi dalje. Kada stigne do kraja ponovo ulazi u for petlju i ponovo razmenjuje mesta elementima, u parovima, sve dok ne dotera do kraja kada se prekida. Da ne bih suvoparno objasnjavao evo kako radi po koracima

Imas pocetni niz (ti si ga zadao):

niz=[1,7,3,5,9,11,8];

u prvom prolazu on radi sledece:

niz=[7,1,3,5,9,11,8];
niz=[7,3,1,5,9,11,8];
niz=[7,3,5,1,9,11,8];
niz=[7,3,5,9,1,11,8];
niz=[7,3,5,9,11,1,8];
niz=[7,3,5,9,11,8,1];

U sledecem prolazu ce da uradi sledece (po koracima)

niz=[7,3,5,9,11,8,1]; (ovde ne menja mesta prva 2 clana, jer je 7>3)
niz=[7,5,3,9,11,8,1];
niz=[7,5,9,3,11,8,1];
niz=[7,5,9,11,3,8,1];
niz=[7,5,9,11,8,3,1];
niz=[7,5,9,11,8,3,1]; (ovde opet ne radi nista)


I tako sve dok ne dotera do kraja

niz=[11,9,8,7,5,3,1];

Nadam se da si razumeo :)
If you can't explain it simply, you don't understand it well enough. A. Einstein
 
Odgovor na temu

Trantor

Član broj: 100930
Poruke: 275
*.dynamic.isp.telekom.rs.

ICQ: 199139277


Profil

icon Re: Matlab problem oko sortiranja elemenata vektora07.01.2011. u 22:56 - pre 161 meseci
OK znači ipak se vraća nazad da ponovo proverava niz kao što sam pretpostavio. Onda to ima logike. E sad ako si video opis ja sam baš tako i opisao "while" i "radi" nego mi je samo čudno da se "radi" postavlja na 1 i okviru "if" a ne u okviru "for" to je sve. A čemu to služi meni je jasno. Ali dobro ovo je sasvim dovoljno da ja mogu da opišem program.

Hvala još jedno!!!
The truth is out there and I want to believe.
 
Odgovor na temu

atomant
Beograd

Član broj: 47540
Poruke: 263
*.dynamic.isp.telekom.rs.



+34 Profil

icon Re: Matlab problem oko sortiranja elemenata vektora08.01.2011. u 15:44 - pre 161 meseci
Kada bi se radi postavljalo u okviru for petlje nikada ne bi ispao iz while petlje jer bi uvek bilo jednako jedinici, tj true. Dobio bi beskonacnu petlju.
If you can't explain it simply, you don't understand it well enough. A. Einstein
 
Odgovor na temu

[es] :: Matematika :: Matlab problem oko sortiranja elemenata vektora

[ Pregleda: 3375 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.