Matrix Spalten vertauschen < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 17:03 Fr 04.11.2016 | Autor: | Schrank |
Hallo,
ich muss eine Funktion programmieren, die für eine beliebige Matrix die Spalten i und j vertauscht.
Ich habe folgendes überlegt, aber das klappt nicht so wirklich.
function M=tausche(M,i,j)
M=input('type M');
i=input('type i');
j=input('type j');
M(:,[i,j])=M(:,[j,i]
end
Stimmt das so? Ich habe diese Woche mit Matlab begonnen, kenne mich auch sonst mit solchen Programmen nicht aus.
Gruß
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 17:57 Fr 04.11.2016 | Autor: | Jule2 |
Hi!
Versuch mal M([i,j],:) = M([j,i],:);
LG
|
|
|
|
|
Status: |
(Frage) überfällig | Datum: | 18:29 Fr 04.11.2016 | Autor: | Schrank |
Hallo,
danke dir. Du hast doch dasselbe wie ich geschrieben, nur dass bei dir die Zeilen vertauscht werden statt der Spalten.
Außerdem soll ich ja eine Funktion schreiben, da reicht glaube ich diese eine Zeile nicht.
Gruß
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 19:24 So 06.11.2016 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 16:43 So 06.11.2016 | Autor: | DieAcht |
Hallo Schrank!
1: | function M=tausche(M,i,j)
| 2: | M(:,[i,j])=M(:,[j,i]);
| 3: | end |
Gruß
DieAcht
|
|
|
|
|
Ich kenne Matlab nicht und kann daher nur vermuten, wo der Fehler liegen kann:
Nehmen wir an, in M[3,5] steht der Wert 43 und in M[5,3] der Wert 88.
Wenn du in einer anderen Computersprache, z.B. PASCAL, den Befehl eingibst:
M[3,5]:=M[5,3],
wird M[5,3]=88 in M[3,5] kopiert, und nun sind M[3,5]= 88 und M[5,3] =88, während die 43 völlig verschwunden ist. Folgt danach der Befehl M[5,3]:=M[3,5], so wird nun die 88 aus M[3,5] nach M[5,3] zurückkopiert, also letztlich nichts mehr verändert.
Man umgeht das Ganze mit der Befehlsfolge
C:=M[3,5] (rettet den Wert 43 von M[3,5] in C)
M[3,5]:=M[5,3] (kopiert nun die 88 nach M[3,5])
M[5,3]:=C (holt sich nun die 43 nach M[5,3]).
Achtung: Jede Kombination i,j aus M[i,j] darf nur einmal links oder rechts vorkommen!!!
Beispiel in Pascal:
for i:=1 to 10 do
for j:=1 to 10 do
begin
C:=M[i,j];
M[i,j]:=M[j,i];
M[j,i]:=C;
end;
Wenn i=3 und j=5 ist, passiert genau der obige Tausch.
Später wird aber irgendwann i=5 und j=3, und dann wird alles wieder zurückgetauscht!!! Dann sieht deine Matrix genau so wie vorher aus.
Richtig also hier:
for i:=1 to 9 do
for j:=i+1 to 10 do
begin
C:=M[i,j];
M[i,j]:=M[j,i];
M[j,i]:=C;
end;
Dadurch ist gewährleistet, dass z.B. die Kombination 3,5 nur einmal vorkommt (und mit 5,3 tauscht), nicht aber 5,3 (und somit nicht zurücktauscht). i=j kann entfallen, würde nur mit sich selber tauschen.
|
|
|
|