1 van 1

Matlab twee rijen verwisselen.

Geplaatst: di 03 jun 2008, 13:23
door Bert F
Als je in matlab in een matrix twee rijen wil verwisselen dan kan je dat als volgt doen:

Stel A is de betreffende matrix dan verwissel je de i en j de rij: A(,: )=A([j i],: ) Maar waarom werkt dit? maw wat doe je eigenlijk? Groeten.

Re: Matlab twee rijen verwisselen.

Geplaatst: di 03 jun 2008, 14:09
door TD
Even geleden dat ik de syntax goed gekende, maar ik dacht dat het zo zat: je steekt in matrix A, in rijen i en j (alle kolommen, vandaar de ,:) de rijen j en i (dus je verwisselt ze) van de huidige inhoud van matrix A (opnieuw alle kolommen).

Re: Matlab twee rijen verwisselen.

Geplaatst: di 03 jun 2008, 22:10
door Bert F
ik dacht dat je twee scalairen moest geven aan A is een scalair?

Re: Matlab twee rijen verwisselen.

Geplaatst: di 03 jun 2008, 22:40
door TD
Om precies één element uit A te selecteren wel ja, dan geef je rij- en kolomindex als argumenten.

Om een hele rij te selecteren, geef je een rij-index en dan ":" om alle kolommen eruit te nemen.

Die ":" staat er dan ter vervanging (of afkorting) van een vector met álle kolomindices.

Om twee rijen te selecteren (rijen i en j), een vector [i,j] en dan weer ":" voor alle kolommen.

Re: Matlab twee rijen verwisselen.

Geplaatst: wo 04 jun 2008, 19:55
door Bert F
Ik blijf het raar vinden maar het werkt dus zullen we dat zomaar gebruiken. Groeten.

Re: Matlab twee rijen verwisselen.

Geplaatst: wo 04 jun 2008, 20:20
door TD
Waarschijnlijk vind je nog wel wat extra uitleg over de syntax in de help-file van Matlab.

Re: Matlab twee rijen verwisselen.

Geplaatst: do 05 jun 2008, 22:51
door Bert F
Zal ik doen Bedankt voor je antwoord.

Re: Matlab twee rijen verwisselen.

Geplaatst: vr 06 jun 2008, 09:12
door EvilBro
Misschien helpt het volgende:

Matrix(Vector met indices van rijen, Vector met indices van kolommen)

Volgens mij is het eerste dat belangrijk is om je te realiseren, is dat matlab/octave voornamelijk met matrices werkt. Op het moment dat jij dus denkt met scalairen te werken, werk je al met een matrix.

Code: Selecteer alles

A(i,j) = A([i],[j])
De reden dat je scalairen kan gebruiken is omdat matlab/octave deze intern naar de juiste syntax omzet. Een zelfde vorm van 'syntactic sugar' is de ':'. Deze wordt intern omgezet naar een vector met alle indices.

De notatie van het volgende betekent dus:
\(A([i, j],: ) = \left[ \begin{array}{c} A(i,: ) \\ A(j,: ) \end{array} \right] = \left[ \begin{array}{cccc} A(i, 1 ) & A(i, 2 ) & \cdots & A(i, N) \\ A(j, 1 ) & A(j, 2 ) & \cdots & A(j, N) \end{array} \right]\)
Als laatste is matlab/octave zo lief dat je op deze manier ook waarden mag toewijzen. Het volgende:

Code: Selecteer alles

A([i j],:) = A([j i],:)
betekent dus:
\(\left[ \begin{array}{cccc} A(i, 1 ) & A(i, 2 ) & \cdots & A(i, N) \\ A(j, 1 ) & A(j, 2 ) & \cdots & A(j, N) \end{array} \right] = \left[ \begin{array}{cccc} A(j, 1 ) & A(j, 2 ) & \cdots & A(j, N) \\ A(i, 1 ) & A(i, 2 ) & \cdots & A(i, N) \end{array} \right]\)
waarbij elke waarde aan de rechterkant gezet wordt in de linkerkant op dezelfde plek.

Re: Matlab twee rijen verwisselen.

Geplaatst: za 07 jun 2008, 23:33
door Bert F
toch wel een krachtige programmeer taal. Bedankt voor je reactie.