Verfasst am: 15.12.2010, 19:09
Titel: Aufsplitten von Vektoren
Hallo,
ich habe Versuchsdaten, die nach dem Schema Versuchsnummer_Messkanal als Vektoren (double) vorliegen (z.B. V01012_TemperaturA, V01012_D1 usw.). In den Versuchen wird ein bestimmter Zyklus mit vier Phasen abgefahren. Ich möchte gerne diese einzeln analysieren und die Daten in die einzelnen Phasen aufspalten. Dafür hätte ich gerne eine Funktion, der die Trennstellen mitgegeben werden, die dann alle Variablen eines Versuchs zerteilt und neue Variablen nach dem Schema Versuchsnummer_Phase_Messkanal anlegt. Hoffe, das war soweit verständlich.
Code:
function seperate(versuch,g1,g2,g3) % Auswählen der Variablen im Workspace, die zum Versuch gehören
Variablen = who('global',strcat(versuch,'*'))
% Anzahl der Variablen für die Schleife
a = length(Variablen);
% Erzeugung der Variablen fuer Phase1
% Erzeugen der neuen Namen
VariablenNeu = regexprep(Variablen,versuch,strcat(versuch,'_P1_'));
% Zuweisen der Werte for i=1:a
assignin('base',VariablenNeu{i},eval(Variablen{i}(1:g1)));
end
% Erzeugung der Variablen fuer Phase2
% Erzeugen der neuen Namen
VariablenNeu = regexprep(Variablen,versuch,strcat(versuch,'_P2_'));
% Zuweisen der Werte for i=1:a
assignin('base',VariablenNeu{i},eval(Variablen{i}((g1+1):g2)));
end end
Im Moment scheitert es schon daran, dass "who" keine Werte liefert. Wie bringe ich who bei, im workspace zu schauen? Könnte es ansonsten so funktionieren?
Verfasst am: 16.12.2010, 04:56
Titel: Re: Aufsplitten von Vektoren
Hallo FZS,
Eine komplizierte Methode zu schreiben um komplizierte Variablen zu erzeugen erfordert immer eine weitere komplizierte Methode, um auf diese Variablen wieder zugreifen zu können.
Ich rate deswegen immer von dynamisch erzeugten Variablen ab. Ein Index ist dagegen eine sehr einfache und brauchbare Methode, verschiedene Messreihen zu unterscheiden.
Statt "V01012_D1" (was immer das bedeuten mag) könnte also z.B. "V(1, 1, 2).D{1}" besser geeignet sein. Damit könnte man die Variablen dann auch ganz sauber als Input und Output an verschiedene Funktionen übergeben.
Ich werde mir nochmal die anderen Datentypen anschauen. Trotzdem würde mich interessieren, wie ich "who" in einer Funktion aufrufen kann und die Variablen des Workspaces erhalte.
Trotzdem würde mich interessieren, wie ich "who" in einer Funktion aufrufen kann und die Variablen des Workspaces erhalte.
Das verstehe ich, und es kann mit EVALIN('base', 'who') auch tatsählich funktionieren.
Ich poste aber hier in diesem Forum, um Leuten zu helfen ihre Matlab-Probleme zu lösen. Deshalb kann ich einfach keine Methode näher beschreiben, von der ich weiß, dass sie unhandliche, kaum debugbare und ineffiziente Programme produziert. Die Geschwindigkeit und Stabilität leidet unter diesen "Poofing"-Tricks sehr.
Da das Thema in diesem Forum regelmäßig, fast täglich, besprochen wird, kannst Du ja mal in der History stöbern.
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
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.