ich habe eine Messreihe auf die ich gerne mit Matlab zugreifen möchte. Die einzelnen Messpunkte zeichnen sich durch unterschiedliche Kombinationen vorgegebener Attribute aus. Die eigentlichen Daten sind nicht in der Messmatrix, diese ist mehr eine übersicht.
Ziel ist es den Namen des entsprechenden Messpunktes unter Angabe einzelner Eigenschaften zu finden.
Also ungefähr so:
Es wurden Frequenzgänge von 20 Lautsprechern aufgenommen und unter den Namen speaker01-speaker20 gespeichert.
In der Messmatrix gibt es beispielsweise die Attribute: Name, Durchmesser, Widerstand, Farbe
Diese sind für jeden der Lautsprecher eingetragen.
Nun wär es prima, wenn man sich von allen grünen Lautsprecher mit 10cm Durchmesser den Namen des zugehörigen ausgeben lassen könnte.
Die Anzahl der vorgegebenen Suchkritierien kann variieren, beispielsweise nur rote Lautsprecher.
Bietet sich eine normale Matrix, cell oder struct für die Speicherung dieser Messpunkteübersicht an und wie wird diese/s dann sinnvoll durchsucht?
Ich hoffe das zumindest die Problematik schonmal verständlich ist...
da könnte sich die Objektorientierte Programmierung anbieten, also ein Objekt Lautsprecher und dann ein Array/Cell von Lautsprecher'n. Wie man da sucht, weiss ich allerdings auch nicht.
_________________
Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Wenn nun eine Großere Anzahl an Feldern durchsucht wird, lässt sich das Prinzip ja erweitern. Wenn nun aber die Anzahl der gesuchten Felder reduziert wird, muss entweder ein suchkriterium ignoriert oder deaktiviert werden:
z.B. ignorieren des Durchmessers: (geht so natürlich nicht...)
Wenn nun eine Großere Anzahl an Feldern durchsucht wird, lässt sich das Prinzip ja erweitern. Wenn nun aber die Anzahl der gesuchten Felder reduziert wird, muss entweder ein suchkriterium ignoriert oder deaktiviert werden:
Das könnte etwas umständlich werden. Ist das denn wirklich dynamisch nötig?
Grüße,
Harald
knarz
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 02.04.2013, 11:33
Titel:
Salü,
die logische Indizierung ist prima.
Die Frage nach der Notwendigkeit ist schwierig, natürlich könnte man auch jedesmal 'von Hand' ablesen. Um ehrlich zu sein lohnt sich der Aufwand wahrscheinlich erst ab dem 50. ablesen...
% Eintragen der Suchbegriffe
searcher = struct;
ifexist('sFarbe','var')
searcher.farbe = sFarbe;
end ifexist('sDurchm','var')
searcher.durchm = sDurchm;
end ifexist('sOhm','var')
searcher.ohm = sOhm;
end % Anzahl der Suchfelder
nfield = fields(searcher);
% initialisieren von id
id = true(1,length(lautspr));
for k=1:length(nfield);
idi = strcmp({lautspr.(nfield{k})},{searcher.(nfield{k})});
id = id & idi;
end
"fields" ist tatsächlich ein Synonym für "fieldnames". Soweit ich weiß, ist dies aber nicht dokumentiert und ich halte es für ausgesprochen tückisch, weil viele alte Codes das Wort "fields" als Variable benutzen.
Gruß, Jan
knarz
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 05.04.2013, 10:42
Titel:
Hi Sirius3;
die Erweiterung der Suchvariablen um Zahlen ist natürlich sinnvoll. Da die aber nicht mit strcmp verarbeitet werden können, habe ich Schleife nochmal aufgeteilt:
Code:
for k=1:length(nfield);
ifischar(searcher.(nfield{k}));
idi = strcmp({lautspr.(nfield{k})},{searcher.(nfield{k})}); % für strings else
idi = [lautspr.(nfield{k})]==searcher.(nfield{k}); % für Zahlen end
id = id & idi;
end
b) macht Sinn, denn können die exist-Abfragen entfallen.
Der fields Befehl war eher unbewusst, aber hat funktioniert - deswegen ist es mit garnicht aufgefallen.
danke nochmal
gruß knarz
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.