Matlab twee rijen verwisselen.

Moderators: jkien, Xilvo

Reageer
Berichten: 2.589

Matlab twee rijen verwisselen.

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.

Gebruikersavatar
Berichten: 24.578

Re: Matlab twee rijen verwisselen.

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).
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

Berichten: 2.589

Re: Matlab twee rijen verwisselen.

ik dacht dat je twee scalairen moest geven aan A is een scalair?

Gebruikersavatar
Berichten: 24.578

Re: Matlab twee rijen verwisselen.

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.
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

Berichten: 2.589

Re: Matlab twee rijen verwisselen.

Ik blijf het raar vinden maar het werkt dus zullen we dat zomaar gebruiken. Groeten.

Gebruikersavatar
Berichten: 24.578

Re: Matlab twee rijen verwisselen.

Waarschijnlijk vind je nog wel wat extra uitleg over de syntax in de help-file van Matlab.
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

Berichten: 2.589

Re: Matlab twee rijen verwisselen.

Zal ik doen Bedankt voor je antwoord.

Berichten: 7.068

Re: Matlab twee rijen verwisselen.

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.

Berichten: 2.589

Re: Matlab twee rijen verwisselen.

toch wel een krachtige programmeer taal. Bedankt voor je reactie.

Reageer