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

Brauche eure Hilfe, bitte! :)

 

Kampfwiesel
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2016, 15:00     Titel: Brauche eure Hilfe, bitte! :)
  Antworten mit Zitat      
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!
Private Nachricht senden Benutzer-Profile anzeigen


Erano1
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 26.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2016, 16:53     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Kampfwiesel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.12.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2016, 17:34     Titel:
  Antworten mit Zitat      
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.

Code:
A = rand (3,2)
function A = transp (A)
    for v = 1 : 1 : 3
      Zwischenmatrix_1 = A(v,1);
    end


und dann noch die zweite Schleifen hinzufügen für die 2te spalte.

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
Erano1
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 59
Anmeldedatum: 26.04.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.12.2016, 18:31     Titel:
  Antworten mit Zitat      
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:

Code:
A=[a11 a12 a13;[a21 a22 a23] %2x3-Matrix


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
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: 18.12.2016, 19:01     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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 - 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.