|
|
Brauche eure Hilfe, bitte! :) |
|
Kampfwiesel |
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 18.12.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.12.2016, 15:00
Titel: Brauche eure Hilfe, bitte! :)
|
|
Moin Moin in die Runde,
also ich bin ein Matlab-Neuling und soll nun folgende Aufgabe lösen, bei der ich keinen Lösungsweg finde:
Ich soll eine Funktion A=transp(A) schreiben, die eine beliebige Matrix transponiert, ohne dabei B = A' zu verweden, also ohne Operatoren.
Als Tipp ist noch angegeben, dass es mit 2 geschachtelten for - Schleifen unter Verwendung einer zweiten lokalen Matrix zum Zwischenspeichern lösbar sein soll.
Leider weiß ich gar nicht, wie ich das Problem angehen soll.
Bitte um eure Hilfe!
|
|
|
|
|
Erano1 |
Forum-Fortgeschrittener
|
|
Beiträge: 59
|
|
|
|
Anmeldedatum: 26.04.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.12.2016, 16:53
Titel:
|
|
Hallo,
was hast du denn bisher alles versucht? Hast du schon etwas geschrieben was nicht funktioniert? Da es in der Anwendung unnötig ist sich die Funktion selber zu schreiben kann es ja nur eine Übung sein, um in Matlab rein zu kommen, da hättest du wenig davon, wenn dir jemand den Code dafür einfach hin schreibt.
Als Tipp für solche Probleme: Fang erstmal mit einer ganz einfachen Matrix an, vielleicht 2x2 (später 2x3) und mach dir bewusst was das transponieren macht (Zeilen der alten sind Spalten der neuen und umgekehrt) und schreibe dir das erstmal auf Papier. Wenn dein Algorithmus für kleine Matrizen funktioniert ist das in der Regel auch ohne Änderung deine Lösung für beliebige nxm Matrizen. Beim Code selber wird der Befehl "size" hilfreich sein, um die Dimension der Matrix welche du transponieren willst zu bestimmen, welche die Grenzen deiner beiden Schleifen sein sollten.
Viele Grüße,
Erano1
|
|
|
Kampfwiesel |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 18.12.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.12.2016, 17:34
Titel:
|
|
Moin,
also meine überlegung war es mit A = rand(2,3) eine Matrix zu erzeugen und dann mit der for schleife die erste spalte in einen Zwischenspeicher zu schreiben.
und dann noch die zweite Schleifen hinzufügen für die 2te spalte.
[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
|
|
|
Erano1 |
Forum-Fortgeschrittener
|
|
Beiträge: 59
|
|
|
|
Anmeldedatum: 26.04.16
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 18.12.2016, 18:31
Titel:
|
|
Hallo,
was passiert, wenn du das so programmierst? Was genau speicherst du dann in Zwischenmatrix_1. Ist A(v,1) die komplette Zeile? Du kannst dir links in deiner Datei Breakpoints setzen und mit F10 auch immer einen Schritt weiter im Code gehen, so kannst du gut nachvollziehen was Zeile für Zeile passiert und wo auch die Fehler liegen könnten.
Wenn:
Dann wird B=A^T(A-transponiert) eine 3x2 Matrix sein wobei B(1,2)=A(2,1) sein wird. Wenn die n die Anzahl der Zeilen in A und m die Anzahl der Spalten, dann wäre der letzte Eintrag in der transponierten Matrix B(m,n)=A(n,m); Das musst du für alle Einträge machen wobei die jeweiligen Einträge der Matrizen die Laufvariablen sind welche bis zur richtigen Grenze laufen müssen (siehe. size-Befehl).
Grüße,
Erano1
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 18.12.2016, 19:01
Titel:
|
|
Hallo Kampfwiesel,
Ein guter Anfang!
Nun denke an den Tipp mit den beiden Schleifen. Eine wird bestimmt über die Zeilen gehen und eine über die Spalten, oder? Mit
[m,n] = size(A)
bekommst Du die Anzahle der Zeilen und Spalten. Nun erstelle mal 2 FOR-Schleifen und lasse Dir erstmal nur die Elemente des Inputs A ausgeben.
Im nächsten Schritt kannst Du die Elemente dann in der Ausgabe-Matrix speichern. Transponieren heißt ja, dass aus den Zeilen-Positionen die Spalten-Positionen werden, und umgekehrt.
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| RSS
Hosted by:
Copyright © 2007 - 2024
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.
|
|