ich komme hier nicht weiter. Wie lässt sich diese for-Schleife vermeiden? F sei eine symmetrische Matrix. Was ich brauche ist die symmetrische Matrix a, die aus je zwei Spalten (oder Zeilen) von F das Maximum bestimmt, also
Geschafft habe ich bisher nur die Reduktion auf die untere Dreiecksmatrix (reicht, weil a symmetrisch ist). Die Diagonale ist leicht, weil nur über eine Spalte von F das Maximum gebildet werden muss. Aber der Rest müsste doch auch gehen, oder?
Gibt es zum Beispiel eine Funktion, die mir alle Zweierpärchen aus den Spalten von F bildet? Ich dachte schon an perms oder nchoosek, aber beide passen nicht richtig.
gebrauchen?
Vielleicht könnte man mit NaN's hier noch die Symmetrie berücksichtigen.
Ansonsten kann man vielleicht noch sagen, dass nicht jede Schleife verteufelt werden muss, denn scheinbar leistet JIT bei deren Optimierung ganz gute Arbeit. Hatte dazu in der Matlab-Newsgroup mal eine Diskussion mit u.A. John D'Errico gelesen. Ich suche noch den Link.
Edit:
Ok, ab einer Größe von 1000x1000 sollte man doch auf die for-Schleife verzichten...
_________________
% Gibt alle Permutationen mit 2 Elementen ohne Wiederholungen aus, leider auch keine Diagonalelemente
ind = nchoosek(1:N,2);
% Umordnung der Indizes von 2-dim auf 1-dim
ind_n = (ind(:,1)-1)*N+ind(:,2);
% Matrix initialisieren
A = zeros(N,N);
% mit Maxima belegen
A(ind_n) = max(F_max(ind'));
% symmetrisch
A = A + A';
% Diagonale hinzu
A = A + diag(F_max);
das hört sich beides schon gut an. Ich probiere mal mit den Laufzeiten herum und berichte dann weiter. Meine Matrizen sind übrigens 800x800 bzw. 1024x1024 und mein Code war schleppend langsam.
ich habe alles drei Codes daraufhin überprüft, ob sie dieselben Matrizen liefern und das war der Fall. Dann der Laufzeittest. Für kleine Matrizen (n = 6, n=10) waren die Codes von dib0r (nowak2.m) und mir (nowak.m) sehr schnell ("0 Sekunden"), während nschlanges Code etwas langsamer war (z.B. 0.3 Sekunden).
Bei der erforderlichen Größenordnung jedoch (n = 1000), sieht es ganz anders aus:
Das ist doch mal eindeutig. Also vielen Dank an Euch beide, ich war mit meinem Latein am Ende. Und sorry, dass der Code nicht lauffähig war, ich ändere es mal oben.
Herzliche Grüße
Bijick
_________________
>> why
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
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.