WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Transponierte Matrix

 

Sippi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2012, 19:51     Titel: Transponierte Matrix
  Antworten mit Zitat      
Weiss jemand wie ich eine quad. Matrix transponiere indem ich die Elemente an der Diagonalen spiegel? Am besten mit 2 for-Schleifen

und ich will nur in der Matrix vertauschen

Shocked


Schon mal danke für Antworten


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.02.2012, 20:02     Titel:
  Antworten mit Zitat      
Hallo,

was spricht gegen
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sippi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2012, 20:14     Titel:
  Antworten mit Zitat      
Das würde doch dies zur folge haben
K>> U
6 7 0 4
8 3 0 6
4 2 6 6
0 6 5 7

K>> u'

ans =

6 8 4 0
7 3 2 6
0 0 6 5
4 6 6 7


hier ist die Matrix doch nicht an der Diagonalen gespiegelt....wollte ich gerade schreiben....aber ist sie doch....... Very Happy

Hilft mir nur leider nicht weiter da ich durch for-Schleifen vertauschen will
wobei will=muss bedeutet
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.02.2012, 20:28     Titel:
  Antworten mit Zitat      
Hallo,

dann handelt es sich wohl um eine Übung oder Hausaufgabe. Da hast du wenig davon, wenn ich dir die fertige Lösung hinschreibe. Also die Frage: wie sehen deine bisherigen Ansätze aus?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sippi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2012, 15:34     Titel:
  Antworten mit Zitat      
Mein Ansatz war bisher

Code:
n=input('Matrixquadrat')

u=fix(9*rand(n,n))

for i=1:n
   
fliplr(u(i:n,i:n))

end
 
Sippi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2012, 15:42     Titel:
  Antworten mit Zitat      
Sippi hat Folgendes geschrieben:
Mein Ansatz war bisher

Code:
n=input('Matrixquadrat')

u=fix(9*rand(n,n))

for i=1:n
   
fliplr(u(i:n,i:n))

end



mehr sinn wenn dann

Code:
n=input('Matrixquadrat')

u=fix(9*rand(n,n))

for i=1:n
   
fliplr(u(1:n,1:n))

end



aber ist auch nicht das was ich genau wollte
jetzt sind nur die reihen gedreht
muss ja die reihen zu spalten ändern
 
Sippi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2012, 15:48     Titel:
  Antworten mit Zitat      
Sopp
beim letzten macht die for-schleife ja keinen sinn, mehr die kann ja weg
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 14.02.2012, 15:57     Titel:
  Antworten mit Zitat      
Code:
a=rand(9);
for i=1:9;
    for k=1:9
        b(i,k)=a(k,i);
    end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
Sippi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2012, 16:32     Titel:
  Antworten mit Zitat      
Da man es, wie oben geschrieben, nur mit vertauschen innerhalb der Matrix lösen soll ist das nicht möglich leider..... bzw denke ich das dieser weg dann ausgeschlossen ist da man eine weitere matrix zur hilfe nimmt

aber bei mir überschreibt sich auch immer alles wenn ich es in einer mache :/
 
Sippi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2012, 16:42     Titel:
  Antworten mit Zitat      
Geht das überhaupt? Wenn ich innerhalb einer Matrix die Positionen ändere überschreibe ich und verliere die restlichen Werte so das sie beiden Hälften Identisch hat.

Die Aufgabe ist eine aus den Übungen des letzten Semesters die ich zur Vorbereitung machen wollte....besitze zur überprüfung aber keine Unterlagen

".......Die Aufgabe soll allein durch Vertauschungen in der Matrix gelöst werden......."

oder soll das gar nicht ausschließen das ich eine Matrix a und eine b benutze?
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 14.02.2012, 16:59     Titel:
  Antworten mit Zitat      
ja es geht auch ohne 2 matritzen zu benutzen. es sind dann in der forschleife 3 schritte nötig. die schleifengrenzen sind dann auch anders. du musst zu den einzelnenen elementen das andere elemente addieren bzw wieder abzihen. ich habs schonmal programmiert und es geht biss auf nen rundungsfehler von eps. da du ja üben willst belass ich es mal bei diesen tipps.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.02.2012, 19:01     Titel:
  Antworten mit Zitat      
Hallo Sippi,

Es ist einfach möglich eine quadratische Matrix zu transponieren. Eine Addition der Elemente ist dazu nicht erforderlich. Man muss lediglich jeweils ein Element in einer temporären Variable zwischen speichern, wie bei jeder Swap-Operation.

In Matlab ist es sinnfrei die Transponierung "in-place", also in der Orginal-Matrix, vorzunehmen, weil Matlab bei der Änderung eines Elements sowieso die ganze Matrix kopiert. In C wäre eine "in-place" Transponierung dagegen effizienter.

Wenn es immer noch nicht klar ist, wäre "inplace" ein hilfreiches Stichwort für eine Suche im Netz...

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 14.02.2012, 19:27     Titel:
  Antworten mit Zitat      
Jan S hat Folgendes geschrieben:
Hallo Sippi,

Es ist einfach möglich eine quadratische Matrix zu transponieren. Eine Addition der Elemente ist dazu nicht erforderlich. Man muss lediglich jeweils ein Element in einer temporären Variable zwischen speichern, wie bei jeder Swap-Operation.

In Matlab ist es sinnfrei die Transponierung "in-place", also in der Orginal-Matrix, vorzunehmen, weil Matlab bei der Änderung eines Elements sowieso die ganze Matrix kopiert. In C wäre eine "in-place" Transponierung dagegen effizienter.

Wenn es immer noch nicht klar ist, wäre "inplace" ein hilfreiches Stichwort für eine Suche im Netz...

Gruß, Jan


ich hatte es aber so verstanden das keine 2. variable verwendet werden soll. auch keine temporäre
Private Nachricht senden Benutzer-Profile anzeigen
 
Sippi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.02.2012, 19:33     Titel:
  Antworten mit Zitat      
also mit dieser varriante

Code:
a=fix(6*rand(5))
for i=1:5;
   
    for k=1:5
         a(k,i)=a(i,k);
    end
end
a


So hab ich die erste Spalte wie die erste Zeile....jedoch funktioniert es danach nicht mehr da die Werte ja überschrieben wurden......

Code:
a=fix(6*rand(5))
for i=5:-1:1;
   
    for k=5:-1:1
         a(k,i)=a(i,k);
    end
end
a


so gilt das gleiche für die letzte Spalte und letzte Zeile und das gleiche Problem besteht.....

meine Überlegung ist es
eine for-schleife bis zur hälfte laufen zu lassen vom beginn
und eine zweite vom ende bis zur mitte.....

aber da wird es doch dann auch zum problem kommen da werte überschrieben wurden........und es funktioniert ja gar nicht die grenze so einfach zu verschieben

wenn ich i=1:3 k=1:3 setze macht er es ja nicht für 3/5 der matrix
sondern ändert dann schon in der ersten spalte nur einen teil

wirklich sinnvoll komme ich nicht vorran
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 14.02.2012, 21:18     Titel:
  Antworten mit Zitat      
die diagonale kannst ja so lassen. also lässt du einen schleife von k=2:n laufen und die andere von l=1:k-1.
ist im grundegenommen einfach. wirst schon drauf kommen
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.