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

variable Spaltenanzahl von Matrizen

 

jochma
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 14.11.2007, 13:01     Titel: variable Spaltenanzahl von Matrizen
  Antworten mit Zitat      
Servus,

hätte mal eine Frage:

in folgender Schleife werden die ID's jener Punkte eines 2-D-Punkthaufens, die sich in einem gewissen Teststreifen mit Breite 2*'thr_range' zwischen 2 vordefinierten Eckpunkten E1(a(1),b(1)) und E2(a(2),b(2)) befinden, gesucht und in der Variable 'idxpkt' gespeichert.
Zur schnelleren Suche der Punkte über den 'find'-Befehl werden die Punkte mit der Rotationsmatrix 'R' [Dimension: 2x2] in ein neues Koordinatensystem gedreht, dessen x-Achse der Richtung der Achse E1 nach E2 entspricht.
Die Koordinaten des Punkthaufens im neuen System befinden sich in den Vektoren 'xN' und 'yN' (vorab berechnet), die Koordinaten der Eckpunkte im neuen System in 'abN'.

Code:

j=1;
o=1;
for i=1:k
% Transformation der Eckpunkte ins neue System
% abN [2x2] enthält die x- und y-Koordinaten der Eckpunkte
    abN=R(j:j+1,:)*[a(o) a(o+1); b(o) b(o+1)];  
        if ((abN(2,1)-abN(2,2)) > 1e-10)
            disp('evtl. ERROR in Trafo!!!')
            return
        end
    % check for right order: p1 = left, p2 = right
   % idxpkt: ids der im Bereich befindlichen Koordinaten
    if ( abN(1,1) > abN(1,2) )
        idxpkt = find((xN(o,:) >= abN(1,2) & xN(o,:) <= abN(1,1)) &  (yN(o,:) >= abN(2,1)-thr_range & yN(o,:) <= abN(2,1)+thr_range));
    else
        idxpkt = find((xN(o,:) >= abN(1,1) & xN(o,:) <= abN(1,2)) &  (yN(o,:) >= abN(2,1)-thr_range & yN(o,:) <= abN(2,1)+thr_range));
    end
    % idx=[idxpkt, NaN];
    j=j+2;
    o=o+1;
end
 


Das Problem ist nun dass 'idxpkt' mit jedem Durchlauf eine jeweils unterschiedliche Länge besitzt und daher nicht so leicht mit 'idxpkt ( i , : )=...' zu deklarieren ist.

Wie kann ich also alternativ dazu:

- für jeden Schleifendurchlauf der Variable 'idxpkt' einen anderen Namen vergeben? Also z.B. idxpkt1, idxpkt2, idxpkt3,... und sie später wieder dynamisch ansprechen.

oder

- für jeden Schleifendurchlauf je eine Reihe der Matrix 'idxpkt' reservieren, wobei fehlende Elemente (aufgrund der variablen Spaltenanzahl) mit 'NaN' oder '0' aufgefüllt werden?

oder

- alle ID's aller Schleifendurchläufe in einen Vektor 'idxpkt' speichern wobei die einzelnen Schleifendurchläufe durch z.B. 'NaN' voneinander zur späteren Trennung markiert werden?

Oder gibts noch andere Lösungsmöglichkeiten?
Eine würd mir schon reichen ... Wink

Besten Dank,

gruß
jochma
Private Nachricht senden Benutzer-Profile anzeigen


jochma
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 14.11.2007, 16:00     Titel:
  Antworten mit Zitat      
hab schon eine Lösung gefunden und zwar mit der Variablenart 'cell'
(idxpkt als cell mit n x 1 Zellen, darin die Vektoren unterschiedlicher Länge)
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 14.11.2007, 18:17     Titel:
  Antworten mit Zitat      
Das sind mir die liebsten, die ihre Fragen selbst beantworten Laughing

Dynamische Variablennamen haben wir hier schon öfter besprochen (vielleicht mal die Suchfunktion nutzen), aber Deine Lösung ist gewiss die eleganteste. Das mit der Suche wäre also eher ein Tipp für's nächste Mal. Smile

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.