www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Matlab naloga

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Naloge, izpiti, seminarske
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
faznprifer
Član
Član



Pridružen-a: Ned 14 Okt 2012 9:36
Prispevkov: 174
Aktiv.: 1.19
Kraj: Celje

PrispevekObjavljeno: Tor Maj 23, 2017 2:16 pm    Naslov sporočila:  Matlab naloga Odgovori s citatom

Pripravljam se na izpit in ker mi for zanke še niso čisto jasne imam težavo s sledečo nalogo:

Generirajte matriki A in B:

A=[3,2,6,8,
9,7,4,1]

B=[4,1,3,5,
2,3,1,6]

Če je element v matriki A večji od 3 mu prištejte istoležni element iz matrike B.


Poskusil sem z IF stavki, vendar nekako moram uporabit tudi FOR zanko, če se ne motim, ker ko je eden pogoj izpolnjen (število je večje od 3) in mi ga nato sešteje z istoležnim številom iz druge matrike in izpiše, se program ustavi in ne preveri še ostalih števil.


To sem sedaj poskušal, upam da merim v pravo smer:

Koda:
A=[3,2,6,8;9,7,4,1]
B=[4,1,3,5;2,3,1,6]

for x=1:8
if A(1)>3
    a=A(1)+B(1)
    disp(a)
   
elseif A(2)>3
    b=A(2)+B(2)
    disp(b)

   
elseif A(3)>3
    c=A(3)+B(3)
    disp(c)


elseif A(4)>3
    d=A(4)+B(4)
    disp(d)
   
elseif A(5)>3
    e=A(5)+B(5)
    disp(e)
   
elseif A(6)>3
    f=A(6)+B(6)
    disp(f)
   
elseif A(7)>3
    g=A(7)+B(7)
    disp(g)
   
elseif A(8)>3
    h=A(8)+B(8)
    disp(h)
   
end
end


Hvala za pomoč !

_________________
L.p. faznprifer
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
darkob
Član
Član



Pridružen-a: Pon 27 Mar 2017 20:33
Prispevkov: 48
Aktiv.: 0.52
Kraj: Ljubljana

PrispevekObjavljeno: Tor Maj 23, 2017 2:29 pm    Naslov sporočila:   Odgovori s citatom

Se ne da v FOR zanki spreminjati spremenljivko x od 1 do 8, ter potem narediti IF stavek za element matrike A na poziciji x?

To, da imaš 8 IF stavkov za 8 elementov je zagotovo slaba rešitev. Kaj, če bi bila naloga za 100 elementov? Ali 1000? Ali 1000000?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mosqito
Član
Član



Pridružen-a: Čet 07 Apr 2016 23:22
Prispevkov: 3432
Aktiv.: 32.90

PrispevekObjavljeno: Tor Maj 23, 2017 9:44 pm    Naslov sporočila:   Odgovori s citatom

Ne rabiš niti for zanke. V matlabu (ali octave, kar sam največ uporabljam) lahko narediš matriko kar s primerjavo. Rezultat bo matrika z 1 in 0 glede na rezultat pogoja.

se pravi, da pogledaš kaj je v A večje od 3:

vecjeodtri = A>3

potem pa po elementih zmnožiš in prišteješ, nekako takole:

novaA = A .+ vecjeodtri .* B


Koda:
octave:1> A=[3,2,6,8,9,7,4,1]
A =

   3   2   6   8   9   7   4   1

octave:2> B=[4,1,3,5, 2,3,1,6]
B =

   4   1   3   5   2   3   1   6

octave:3> vecjeodtri = A>3
vecjeodtri =

   0   0   1   1   1   1   1   0

octave:4> novaA = A .+ vecjeodtri .* B
novaA =

    3    2    9   13   11   10    5    1


Imaš kar online...
https://octave-online.net/

_________________
Always going the extra mile.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
mosqito
Član
Član



Pridružen-a: Čet 07 Apr 2016 23:22
Prispevkov: 3432
Aktiv.: 32.90

PrispevekObjavljeno: Tor Maj 23, 2017 9:51 pm    Naslov sporočila:   Odgovori s citatom

Aja, poglej si "pointwise" operacije na matrikah predvsem. To je zelo močno ordje. Če delaš z nekimi for in podobnim, si zgrešil bistvo uporabe ML/Octave. Predstavljaj si, da je matrika dolga ne 8 ampak 8M števil. A boš potem 8 milijonov if vrstic pisal ha ha ha ?
_________________
Always going the extra mile.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
faznprifer
Član
Član



Pridružen-a: Ned 14 Okt 2012 9:36
Prispevkov: 174
Aktiv.: 1.19
Kraj: Celje

PrispevekObjavljeno: Sre Maj 24, 2017 9:59 am    Naslov sporočila:   Odgovori s citatom

Hvala mosqito za lepo razlago, vendar sem pozabil omenit, da se naloga nanaša na for zanke, zato me zanima kako bi lahko to rešil z for zanko.
_________________
L.p. faznprifer
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.79
Kraj: Lovrenc na P.

PrispevekObjavljeno: Sre Maj 24, 2017 10:52 am    Naslov sporočila:   Odgovori s citatom

Koda:
for x=1:8
   if A(x)>3
       A(x)=A(x)+B(x);
   end
end

Tako?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
kastaneda
Član
Član



Pridružen-a: Pet 23 Okt 2009 11:18
Prispevkov: 458
Aktiv.: 2.50

PrispevekObjavljeno: Sre Maj 24, 2017 10:52 am    Naslov sporočila:   Odgovori s citatom

Mogoče tako:

if A(x)>3
a=A(x)+B(x)

_________________
LP
Srečko
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
faznprifer
Član
Član



Pridružen-a: Ned 14 Okt 2012 9:36
Prispevkov: 174
Aktiv.: 1.19
Kraj: Celje

PrispevekObjavljeno: Sre Maj 24, 2017 4:53 pm    Naslov sporočila:   Odgovori s citatom

Točno tako in nič drugače. Kako se zdi to enostavno ko vidim rešitev. Very Happy Hvala za pomoč, mogoče jo bom še potreboval.
_________________
L.p. faznprifer
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
faznprifer
Član
Član



Pridružen-a: Ned 14 Okt 2012 9:36
Prispevkov: 174
Aktiv.: 1.19
Kraj: Celje

PrispevekObjavljeno: Čet Maj 25, 2017 3:10 pm    Naslov sporočila:   Odgovori s citatom

Še eno vprašanje. Kako iz množice vektorskih števil npr. [2 5 2 8 4 8 2 5], dobim podatek koliko je dvojk.
_________________
L.p. faznprifer
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
darkob
Član
Član



Pridružen-a: Pon 27 Mar 2017 20:33
Prispevkov: 48
Aktiv.: 0.52
Kraj: Ljubljana

PrispevekObjavljeno: Pet Maj 26, 2017 10:52 am    Naslov sporočila:   Odgovori s citatom

faznprifer je napisal/a:
Še eno vprašanje. Kako iz množice vektorskih števil npr. [2 5 2 8 4 8 2 5], dobim podatek koliko je dvojk.


Npr:

A=[2,5,2,8,4,8,2,5];
B=0;
for x=1:8
if (A(x)==(2))
B=B+1;
endif
endfor
disp(B);
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
MarkoM
Član
Član



Pridružen-a: Tor 12 Sep 2006 15:29
Prispevkov: 2825
Aktiv.: 12.79
Kraj: Lovrenc na P.

PrispevekObjavljeno: Pet Maj 26, 2017 11:53 am    Naslov sporočila:   Odgovori s citatom

Matlab je poln namenskih funkcij za manipulacijo vektorjev in matrik, for zanke upočasnijo delovanje. Če je le možno, uporabimo namenske funkcije.
Koda:
A=[2 5 2 8 4 8 2 5];
I = find(A == 2);
y=size(I);
y=y(:,2)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Naloge, izpiti, seminarske Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 265 dni


Powered by phpBB © 2001, 2005 phpBB Group