www.elektronik.si
Matlab naloga

www.elektronik.si -> Naloge, izpiti, seminarske

Avtor: faznpriferKraj: Celje PrispevekObjavljeno: 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č !

Avtor: darkobKraj: Ljubljana PrispevekObjavljeno: 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?

Avtor: mosqito PrispevekObjavljeno: 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/

Avtor: mosqito PrispevekObjavljeno: 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 ?

Avtor: faznpriferKraj: Celje PrispevekObjavljeno: 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.

Avtor: MarkoMKraj: Lovrenc na P. PrispevekObjavljeno: 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?

Avtor: kastaneda PrispevekObjavljeno: Sre Maj 24, 2017 10:52 am    Naslov sporočila:  
----------------------------------------------------------------------------
Mogoče tako:

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

Avtor: faznpriferKraj: Celje PrispevekObjavljeno: 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. Very Happy Hvala za pomoč, mogoče jo bom še potreboval.

Avtor: faznpriferKraj: Celje PrispevekObjavljeno: Č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.

Avtor: darkobKraj: Ljubljana PrispevekObjavljeno: 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);

Avtor: MarkoMKraj: Lovrenc na P. PrispevekObjavljeno: 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)

Stran 1 od 1

Powered by phpBB © 2001,2002 phpBB Group