1 van 1

Merge in matlab.

Geplaatst: do 26 feb 2009, 10:04
door JohanB
ik loop al een hele tijd rond met volgende code in matlab:

Code: Selecteer alles

function res=merge1(rij1,rij2)



n=length(rij1)

m=length(rij2)



rij=[];



  for teller=1 : 2 : min(n,m)

  

	  rij(teller)=rij1(teller)

	  rij(teller+1)=rij2(teller)

	 

  end

  

  rij
bedoeling is om twee rijen te mergen, ik weet dat dit stukje nog niet af is maar wat het wel al zou moeten doen doet het ook niet? als ik een rij neem 1 2 3 4 5 6 en 1 2 3 4 5 6 dan bekom ik 1 2 3 4 5 6

als ik een rij neem 7 7 7 7 en 8 8 8 8 8 dan bekom ik wel 7 8 7 8 7 enz hoe komt het dat bij verschillende input mijn resultaat verschillend is?

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 10:57
door EvilBro
hoe komt het dat bij verschillende input mijn resultaat verschillend is?
Waarom verwacht je dat je resultaat hetzelfde zou blijven bij verschillende input?

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 11:43
door Vladimir Lenin
Volgens mij zie ik al je fout: bij de tweede index van de tweede toewijzing:

Code: Selecteer alles

function res=merge1(rij1,rij2)

n=length(rij1)

m=length(rij2)

rij=[];

  for teller=1 : 2 : min(n,m)

  

  rij(teller)=rij1(teller)

  rij(teller+1)=rij2(teller+1)

 

  end

  

  rij
in dat geval moet je wel telkens controleren dat de lengte van rij2 niet te klein is in verhouding tot teller+1. Daar je maar met stappen van 2 controleert.

Het verschil is:

stel je hebt een rij a, b, c, d en een rij e, f, g, h. In jouw geval zou je uitkomen: a, e, c, g. Terwijl als ik je vraag goed begrijp (en dus de code juist aangepast heb, je met mijn code a, f, c, h uitkomt.

Wat dus de output bij jou probleem met de rijen 1, 2, 3, 4, 5, 6 en nogmaals 1, 2, 3, 4, 5, 6 was is 1, 1, 3, 3, 5, 5

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 12:31
door JohanB
ik heb als input

rij1 1 2 3 4 5 6 7 8 9

rij2 1 2 3 4 5 6 7 8 9

en bekom met bovenstaande code volgende output:

1 2 3 4 5 6 7 8 9

als ik nu

rij1 7 7 7 7 7 7 7 7 7

rij2 8 8 8 8 8 8 8 8 8

dan bekom ik

7 8 7 8 7 8 7 8

dus afwisselend.

hoe komt het dat ik in het eerste geval niet

1 1 2 2 3 3 4 4 ... bekom?

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 13:09
door Vladimir Lenin
Oh bedoelde je dat, ik had je vraag niet goed begrepen, dan is het simpel:

Code: Selecteer alles

function res=merge1(rij1,rij2)

n=length(rij1)

m=length(rij2)

rij=[];

  for teller=1 : 2 : 2*min(n,m)

  

  rij(teller)=rij1((teller+1)/2)

  rij(teller+1)=rij2((teller+1)/2)

 

  end

  

  rij
ik begreep even niet wat je er van wilde maken, mijn excuses

Verder denk ik dat je het bereik van je for, dan ook moet verdubbelen. Anders zal het algoritme ophouden bij de helft van de opdracht. dus 2*2*min(n,m)

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 13:35
door EvilBro
JohanB schreef:ik heb als input

rij1 1 2 3 4 5 6 7 8 9

rij2 1 2 3 4 5 6 7 8 9

en bekom met bovenstaande code volgende output:

1 2 3 4 5 6 7 8 9
Ik niet. Ik krijg [1 1 3 3 5 5 7 7 9 9]. Dat verwacht ik ook op basis van de code.

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 18:59
door JohanB
nu zie ik weer waar ik fout zit het zou 1 1 2 2 3 3 4 4 5 5 moeten zijn namelijk het eerste element van de eerste rij dan het eerste element van de tweede rij dan weer het tweede element van de eerste rij enz

met een stapgroote van twee kom je er niet maar als ik dit verander naar een stap groote naar één dan krijg ik 1 2 3 4 5... ipv 1 1 2 2 3 3 4 4 5 5 waarom krijg ik dit niet.

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 19:09
door Tommeke14
ah ik heb die oefening enkele dagen geleden gemaakt

Dit is wat ik ervan heb gemaakt:

Code: Selecteer alles

function res= merge(rij1,rij2)

B = [];

for i=1:length(rij1)+length(rij2)

if i <length(rij1)

B = [B,rij1(1,i)];

end

   if i <length(rij2)

B = [B,rij2(1,i)];

end 

end

 res = B;

end
Het zal wss wel veel simpeler kunnen dan dat, maar zo werkt het alleszins 8-)

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 19:14
door dirkwb

Code: Selecteer alles

function res=merge1(rij1,rij2)



n=length(rij1)

m=length(rij2)



rij=[];



  for teller=1 : 1 : min(n,m)

  

	  rij(2*teller-1)=rij1(teller)

	  rij(2*teller)=rij2(teller)

	

  end

  

  rij

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 19:18
door Tommeke14
Volgens mij heeft JohanB deel van opdracht vergeten te zeggen (ik ken de oefening namelijk omdat ik dezelfde heb 8-) )

Als bvb rij1 leeg is, wordt de resulterende rij gevuld met de overige elementen van rij2

(voorgaande oplossing kan dat niet doen)

Om verwarring te voorkomen:

http://wwwtw.vub.ac.be/wisk/data/InlMatlab/opgavenMATLAB.pdf

opgave 14

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 19:22
door dirkwb
Tommeke14 schreef:Volgens mij heeft JohanB deel van opdracht vergeten te zeggen (ik ken de oefening namelijk omdat ik dezelfde heb :D )

Als bvb rij1 leeg is, wordt de resulterende rij gevuld met de overige elementen van rij2

(voorgaande oplossing kan dat niet doen)
Ja dat dacht ik al 8-)

Maar het was de bedoeling dat ik het idee gaf en dat hij het verder afmaakte...

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 20:46
door JohanB
Bedankt ik heb het ook gevonden. Ik weet dat, dat maar een deel kan maar het tweede deel is triviaal als je het eerst hebt.

Re: Merge in matlab.

Geplaatst: do 26 feb 2009, 22:50
door EvilBro

Code: Selecteer alles

function ret = merge(rij1, rij2)

  k = min(length(rij1),length(rij2));



  a(1:2:(2*k-1)) = rij1(1:k);

  a(2:2:(2*k))   = rij2(1:k);

  ret = [a rij1(k+1:end) rij2(k+1:end)];

end