|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
faznprifer Član
Pridružen-a: Ned 14 Okt 2012 9:36 Prispevkov: 174 Aktiv.: 1.19 Kraj: Celje
|
Objavljeno: Tor Maj 23, 2017 2:16 pm Naslov sporočila: Matlab naloga |
|
|
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 |
|
|
darkob Član
Pridružen-a: Pon 27 Mar 2017 20:33 Prispevkov: 48 Aktiv.: 0.52 Kraj: Ljubljana
|
Objavljeno: Tor Maj 23, 2017 2:29 pm Naslov sporočila: |
|
|
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 |
|
|
mosqito Član
Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3432 Aktiv.: 32.90
|
Objavljeno: Tor Maj 23, 2017 9:44 pm Naslov sporočila: |
|
|
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 |
|
|
mosqito Član
Pridružen-a: Čet 07 Apr 2016 23:22 Prispevkov: 3432 Aktiv.: 32.90
|
Objavljeno: Tor Maj 23, 2017 9:51 pm Naslov sporočila: |
|
|
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 |
|
|
faznprifer Član
Pridružen-a: Ned 14 Okt 2012 9:36 Prispevkov: 174 Aktiv.: 1.19 Kraj: Celje
|
Objavljeno: Sre Maj 24, 2017 9:59 am Naslov sporočila: |
|
|
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 |
|
|
MarkoM Član
Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.79 Kraj: Lovrenc na P.
|
Objavljeno: Sre Maj 24, 2017 10:52 am Naslov sporočila: |
|
|
Koda: |
for x=1:8
if A(x)>3
A(x)=A(x)+B(x);
end
end |
Tako? |
|
Nazaj na vrh |
|
|
kastaneda Član
Pridružen-a: Pet 23 Okt 2009 11:18 Prispevkov: 458 Aktiv.: 2.50
|
Objavljeno: Sre Maj 24, 2017 10:52 am Naslov sporočila: |
|
|
Mogoče tako:
if A(x)>3
a=A(x)+B(x) _________________ LP
Srečko |
|
Nazaj na vrh |
|
|
faznprifer Član
Pridružen-a: Ned 14 Okt 2012 9:36 Prispevkov: 174 Aktiv.: 1.19 Kraj: Celje
|
Objavljeno: Sre Maj 24, 2017 4:53 pm Naslov sporočila: |
|
|
Točno tako in nič drugače. Kako se zdi to enostavno ko vidim rešitev. Hvala za pomoč, mogoče jo bom še potreboval. _________________ L.p. faznprifer |
|
Nazaj na vrh |
|
|
faznprifer Član
Pridružen-a: Ned 14 Okt 2012 9:36 Prispevkov: 174 Aktiv.: 1.19 Kraj: Celje
|
Objavljeno: Čet Maj 25, 2017 3:10 pm Naslov sporočila: |
|
|
Š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 |
|
|
darkob Član
Pridružen-a: Pon 27 Mar 2017 20:33 Prispevkov: 48 Aktiv.: 0.52 Kraj: Ljubljana
|
Objavljeno: Pet Maj 26, 2017 10:52 am Naslov sporočila: |
|
|
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 |
|
|
MarkoM Član
Pridružen-a: Tor 12 Sep 2006 15:29 Prispevkov: 2825 Aktiv.: 12.79 Kraj: Lovrenc na P.
|
Objavljeno: Pet Maj 26, 2017 11:53 am Naslov sporočila: |
|
|
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 |
|
|
|
|
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
|